我想知道在同一个using
语句中处理多个sql的以下方式是否正确,我已经在一个项目中对此进行了测试并且它可以正常工作但是将每个sql包装在自己的使用中是不是更好声明?哪个选项是更好的编码实践?
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
由于
答案 0 :(得分: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 oject。为每个操作创建一个新操作,并为每个IDisposable对象创建一个。
答案 1 :(得分:2)
我个人每次执行都会使用不同的SqlCommand
对象。
使用这个简单的脚本很容易看到发生了什么,但是如果你的脚本变得更复杂并且需要Sql参数,你将不得不记得在每次执行后删除它们(如果它们不需要),否则会出现异常被抛出。