请问代码里面的sqlCon需要Close吗?
--------------------编程问答-------------------- 要呀,释放资源! --------------------编程问答-------------------- 要的. --------------------编程问答-------------------- finally
/// <summary>
/// 创建SqlDataAdapter对象
/// </summary>
/// <param name="procName">存储过程的名称</param>
/// <param name="prams">存储过程所需参数</param>
/// <returns>返回SqlDataAdapter对象</returns>
private static SqlDataAdapter CreateSqlDataAdapter(string procName,
params SqlParameter[] prams)
{ ///创建数据库连接
SqlConnection sqlCon = CreateSqlConnection();
///打开数据库连接
if (sqlCon == null) return null;
if (sqlCon.State == ConnectionState.Closed)
{
sqlCon.Open();
}
///设置SqlDataAdapter的属性
SqlDataAdapter da = new SqlDataAdapter(procName, sqlCon);
da.SelectCommand.CommandType = CommandType.StoredProcedure;
///添加存储过程参数
if (prams != null)
{
foreach (SqlParameter parameter in prams)
{
da.SelectCommand.Parameters.Add(parameter);
}
}
///添加返回参数
da.SelectCommand.Parameters.Add(new SqlParameter(returnValueString,
SqlDbType.Int, 4, ParameterDirection.ReturnValue,
false, 0, 0, string.Empty, DataRowVersion.Default, null));
///返回SqlDataAdapter对象
return da;
}
{
if (connection != null)
{
connection.Close();
connection.Dispose();
}
if (command != null)
{
command.Dispose();
}
} --------------------编程问答-------------------- 要
一般在try{}catch{}finially{}结构中写在finailly中 --------------------编程问答-------------------- 这是肯定要的。
因为比较多使用SqlHelper之类的东西,SqlHelper里面,一般都是使用using来自动释放资源的吧。。。
--------------------编程问答-------------------- 那我应该怎么调整呢??? --------------------编程问答-------------------- 对的,要释放资源,,或者使用using
数据库连接是要手动释放资源的。 --------------------编程问答-------------------- SqlConnection sqlconn = new SqlConnection(SqlHelper._connectionString);
sqlconn.Open();
SqlCommand sqlcomm = new SqlCommand(sqlString, sqlconn);
SqlDataReader reader = sqlcomm.ExecuteReader();
...
reader.Close();
sqlcomm.Dispose();
sqlconn.Close(); --------------------编程问答-------------------- 使用using(){}结构写这类代码,不需要显示执行Close()。 --------------------编程问答-------------------- 谁能帮我在原有代码的基础上,进行一下优化啊?? --------------------编程问答-------------------- 是这样?????
--------------------编程问答--------------------
/// <summary>
/// 创建SqlDataAdapter对象
/// </summary>
/// <param name="procName">存储过程的名称</param>
/// <param name="prams">存储过程所需参数</param>
/// <returns>返回SqlDataAdapter对象</returns>
private static SqlDataAdapter CreateSqlDataAdapter(string procName,
params SqlParameter[] prams)
{
///创建数据库连接
SqlConnection sqlCon = CreateSqlConnection();
using (sqlCon)
{
///打开数据库连接
if (sqlCon == null) return null;
if (sqlCon.State == ConnectionState.Closed)
{
sqlCon.Open();
}
///设置SqlDataAdapter的属性
SqlDataAdapter da = new SqlDataAdapter(procName, sqlCon);
da.SelectCommand.CommandType = CommandType.StoredProcedure;
///添加存储过程参数
if (prams != null)
{
foreach (SqlParameter parameter in prams)
{
da.SelectCommand.Parameters.Add(parameter);
}
}
///添加返回参数
da.SelectCommand.Parameters.Add(new SqlParameter(returnValueString,
SqlDbType.Int, 4, ParameterDirection.ReturnValue,
false, 0, 0, string.Empty, DataRowVersion.Default, null));
///返回SqlDataAdapter对象
return da;
}
}
--------------------编程问答-------------------- using也可以 建议用using --------------------编程问答--------------------
/// <summary>
/// 创建SqlDataAdapter对象
/// </summary>
/// <param name="procName">存储过程的名称</param>
/// <param name="prams">存储过程所需参数</param>
/// <returns>返回SqlDataAdapter对象</returns>
private static SqlDataAdapter CreateSqlDataAdapter(string procName,
params SqlParameter[] prams)
{ ///创建数据库连接
SqlConnection sqlCon = CreateSqlConnection();
try
{
///打开数据库连接
if (sqlCon == null) return null;
if (sqlCon.State == ConnectionState.Closed)
{
sqlCon.Open();
}
///设置SqlDataAdapter的属性
SqlDataAdapter da = new SqlDataAdapter(procName, sqlCon);
da.SelectCommand.CommandType = CommandType.StoredProcedure;
///添加存储过程参数
if (prams != null)
{
foreach (SqlParameter parameter in prams)
{
da.SelectCommand.Parameters.Add(parameter);
}
}
///添加返回参数
da.SelectCommand.Parameters.Add(new SqlParameter(returnValueString,
SqlDbType.Int, 4, ParameterDirection.ReturnValue,
false, 0, 0, string.Empty, DataRowVersion.Default, null));
///返回SqlDataAdapter对象
return da;
}
catch
{
return null;
}
finally
{
if (sqlCon != null)
{
sqlCon.Close();
}
}
}
--------------------编程问答-------------------- 有始有终么 有打开就有关闭 --------------------编程问答-------------------- 要得,养成好习惯! --------------------编程问答-------------------- using (SqlConnection conn = new SqlConnection(connectionString))
using(SqlConnection sqlCon = CreateSqlConnection())
{
...your code
}
{
your code;
}
其实直接使用SqlHelper不好么。。。 --------------------编程问答-------------------- 这里的return (new SqlConnection(conStr));要关闭吗????
--------------------编程问答-------------------- 使用using(){}写这类代码,就不需要执行Close()。 --------------------编程问答--------------------
/// <summary>
/// 创建连接.
/// </summary>
private static SqlConnection CreateSqlConnection()
{ ///获取连接字符串
string conStr = (string)Cache.GetData(connectionStringNameInWebConfig);
if (string.IsNullOrEmpty(conStr))
{
try
{ ///如果连接字符串为空,则从配置文件中获取连接字符串
conStr = ConfigurationManager.ConnectionStrings[connectionStringNameInWebConfig].ConnectionString;
}
catch (Exception ex)
{
throw new Exception(ex.Message, ex);
}
///把字符串添加到缓存中
Cache.CachingData(connectionStringNameInWebConfig, conStr);
}
if (!string.IsNullOrEmpty(conStr))
{ /// 创建数据库连接
return (new SqlConnection(conStr));
}
return null;
}
using不用释放 --------------------编程问答-------------------- 强烈建议,using --------------------编程问答-------------------- 楼主的帖子都是无满意结贴,建议不要回复他,易做图此ID --------------------编程问答-------------------- 最简单的方法:return前加句sqlcon.Close(); --------------------编程问答-------------------- 还好意思发帖问问题是么。。看看你的结贴。。建议易做图
补充:.NET技术 , ASP.NET