SQLコマンドが適切に破棄されているかどうかをどうやって知ることができますか?
私の問題は、sqlcommandがnullと同等ではないため、コードが常にfalseを返すことです。
どうすればこの問題を修正できますか?
これが私のコードです:
private SqlCommand Command()
{
cmd = new SqlCommand(QueryStr, Connection);
cmd.StatementCompleted += new StatementCompletedEventHandler(cmd_StatementCompleted);
return cmd;
}
private void cmd_StatementCompleted(object sender, StatementCompletedEventArgs e)
{
((SqlCommand)sender).Dispose();
}
public object GetScalarResult()
{
Command();
cmd.CommandType = CommandType;
con.Open();
return cmd.ExecuteScalar();
}
public bool IsDisposedChecker()
{
if (cmd == null)
{
return true;
}
else
{
return false;
}
}
IsDisposedChecker関数は常にfalseを返すため、sqlcommandが適切に破棄されませんか?
Dispose()
ポインタをnullにリセットしません。したがって、ISDisposedChecker関数はこのようには機能しません。
Disposeはデストラクタではありません。
私はdispose-checkerを実装しません。結果としてSqlCommandを返したい場合は、呼び出し元のメソッドにDisposeの責任を負わせます。
private SqlCommand Command()
{
cmd = new SqlCommand(QueryStr, Connection);
return cmd;
}
private void Test()
{
// a using block is very safe, it will dispose the command
// even when exceptions are thrown.
using(SqlCommand command = Command())
{
// do your thing....
}
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加