【发布时间】:2016-09-21 20:14:55
【问题描述】:
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;
}
【问题讨论】:
-
这完全取决于
_databaseHelper.CloseConnection()的作用。Database.Connection的使用也是值得怀疑的——通常你不希望Dispose()使用在其他地方拥有的东西。如果Database.Connection确实每次都返回一个新的连接实例,我会将其切换为GetConnection()方法。 -
@dahlbyk 为什么要依赖closeconnection?如果在此行之前有异常怎么办?
-
var sqlConnection = (SqlConnection)Database.Connection;如果此代码返回新连接,我认为问题不会是
-
@dahlbyk Database.Connection 是 DbContext.Connection
标签: c# sql .net visual-studio