正确处理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;
}

正确处理SqlConnection内部的使用

你没有在这里打开一个新的连接,所以它无论如何都不会被处理,这不是交易。

SqlCommand在任何情况下都将被正确关闭,因为您使用的是using结构。但是,如果这一行,例如var adapter = new SqlDataAdapter(command);将抛出异常,那么_databaseHelper.CloseConnection(command);显然不会被称为

sqlConnection得到正确处理吗?

_databaseHelper.CloseConnection(command)暗示它可能包含command.Connection.Close()调用,这相当于调用Dispose(),但这不会被描述为"正确",因为它不在finally块中。