ストアドプロシージャからレコードを照会するコードがありますが、私が必要としているものを廃棄していないか、オブジェクトがガベージコレクタによって後で削除されたときに処分していない可能性があります。c#sql何を処理するか
SqlDataReaderはtry catchブロック内にあるため、処理する必要がありますか?
cmd.Disposeとcmd.Connection.Closeの両方を実行する必要がありますか、または他のものを推測しますか?
ガベージコレクタは、最終的にこれらのオブジェクトをすべて処分しますか(タイムリーではないかもしれません)か、これらのオブジェクトはアンマネージドコードを使用している可能性があります。
public void GetData(string studentID)
{
SqlCommand cmd = new SqlCommand("sp_stored_proc",
new SqlConnection(Settings.Default.connectionString))
{ CommandType = CommandType.StoredProcedure };
try
{
cmd.Connection.Open();
cmd.Parameters.AddWithValue("@student_id", studentID);
SqlDataReader dr = cmd.ExecuteReader();
//do something with the data
if (dr != null)
dr.Dispose();
}
catch
{
//error handling
}
finally
{
if (cmd != null)
{
cmd.Dispose();
cmd.Connection.Close();
}
}
}
これを複数回アップヴォートすることができたら、私はそうするでしょう。 COME ON PEOPLE!ブロックの使用! –
'SqlCommand'オブジェクトを破棄すると、' SqlConnection'が処理されません**。これはテストが非常に簡単です。 http://stackoverflow.com/questions/60919/is-sqlcommand-dispose-enough/60934#60934 – arcain
私はコマンドを処理しても読者を処分する必要がありますか?私は接続を廃棄してもコマンドを破棄する必要がありますか?あなたはこれのどんな情報源にも私たちを紹介することができますか? – Lii