0

同じusingステートメント内で複数のSQLを処理する以下の方法が正しいかどうか疑問に思っていました。これをプロジェクトでテストしましたが、機能しますが、各SQLを独自のusingステートメントでラップする方がよいでしょうか。どちらのオプションがより良いコーディング方法ですか?

Using cmd As New SqlCommand()

    cmd.Connection = conn
    cmd.CommandType = CommandType.Text

    sql = "Select * From blah"
    cmd.CommandText = sql
    theValue = cmd.ExecuteScalar()

    sql = "Update tbl1 Set a = b"
    cmd.CommandText = sql
    cmd.ExecuteScalar()

    sql = "Update tbl2 Set x = y"
    cmd.CommandText = sql
    cmd.ExecuteNonQuery()

End Using

ありがとう

4

2 に答える 2

3

これは悪い習慣であり、何かが漏れる可能性があります。

Command.Close が存在するかどうかさえわかりませんが、欠落しています:

sql = "Select * From blah"
cmd.CommandText = sql
theValue = cmd.ExecuteScalar()

cmd.Close()   ' you need something like this

sql = "Update tbl1 Set a = b"
cmd.CommandText = sql
cmd.ExecuteScalar()

もちろん、望ましい方法は Command オブジェクトを再利用しないことです。アクションごとに新しいものを作成し、IDisposable オブジェクトごとに 1 つの Using を作成します。

于 2012-08-17T15:53:05.393 に答える
2

個人的には、SqlCommand実行ごとに異なるオブジェクトを使用します。

この単純なスクリプトを使用すると、何が起こっているかを簡単に確認できますが、スクリプトがより複雑になり、Sql パラメーターが必要になる場合は、実行のたびにそれらを削除することを忘れないでください (不要な場合)。そうしないと、例外がスローされます。

于 2012-08-17T15:52:20.093 に答える