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 个。

于 2012-08-17T15:53:05.393 回答
2

SqlCommand就我个人而言,每次执行我都会使用不同的对象。

使用这个简单的脚本很容易看到发生了什么,但是如果您的脚本变得更复杂并且需要 Sql 参数,您必须记住在每次执行后删除它们(如果不需要它们),否则会引发异常。

于 2012-08-17T15:52:20.093 回答