正确处理SqlConnection内部的使用
本文关键字:内部 SqlConnection 正确处理 | 更新日期: 2023-09-27 18:08:15
SqlConnection
是否得到妥善处理?
/// <summary>
/// Executes the stored procedure using the parameters.
/// </summary>
/// <param name="storedProcedureName"></param>
/// <param name="parameters"></param>
/// <param name="timeoutValue"></param>
/// <returns></returns>
public DataSet ExecuteStoredProcedure(string storedProcedureName, List<SqlParameter> parameters, int timeoutValue = 0)
{
var ds = new DataSet();
var sqlConnection = (SqlConnection)Database.Connection;
using (var command = new SqlCommand(storedProcedureName, sqlConnection))
{
//setting CommandTimeout specified value
if (timeoutValue > 0)
{
command.CommandTimeout = timeoutValue;
}
command.CommandType = CommandType.StoredProcedure;
foreach (var param in parameters)
{
command.Parameters.Add(param);
}
_databaseHelper.OpenConnection(command);
var adapter = new SqlDataAdapter(command);
adapter.Fill(ds);
_databaseHelper.CloseConnection(command);
}
return ds;
}
你没有在这里打开一个新的连接,所以它无论如何都不会被处理,这不是交易。
SqlCommand
在任何情况下都将被正确关闭,因为您使用的是using
结构。但是,如果这一行,例如var adapter = new SqlDataAdapter(command);
将抛出异常,那么_databaseHelper.CloseConnection(command);
显然不会被称为
sqlConnection得到正确处理吗?
。_databaseHelper.CloseConnection(command)
暗示它可能包含command.Connection.Close()
调用,这相当于调用Dispose()
,但这不会被描述为"正确",因为它不在finally
块中。