2016-09-21 7 views
0

SqlConnectionは適切に処分されていますか?内部で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; 
} 
+4

これは '_databaseHelper.CloseConnection()'が何をするかによってまったく決まります。 'Database.Connection'の使用も容認されています - 一般にあなたは他の場所に所有されているものの' Dispose() 'をしたくないでしょう。 'Database.Connection'が毎回新しい接続インスタンスを返す場合は、' GetConnection() 'メソッドに切り替えます。 – dahlbyk

+0

@dahlbykなぜそれはcloseconnectionに依存しますか?この行の前に例外があればどうなりますか? –

+0

var sqlConnection =(SqlConnection)Database.Connection;このコードが新しい接続を返す場合、私は問題がないと思います –

答えて

2

ここで新しい接続を開くわけではないので、とにかく処理されることはありません。

SqlCommandあなたがusing構成を使用しているため、どの場合でも正常に終了します。たとえばvar adapter = new SqlDataAdapter(command);のためのこの行は、例外がスローされます場合は、_databaseHelper.CloseConnection(command);は明らかに文句を言わない

1

と呼ばれることSqlConnectionのが適切に配置されますしていますか?

_databaseHelper.CloseConnection(command)は、それがDispose()を呼び出すことと同じですcommand.Connection.Close()コールを、含むかもしれないことを意味し、それはfinallyブロックではないので、これは「適切に」と記載されません。

関連する問題