VB.NET:嵌套“;使用;用于数据库访问
我想知道,从正确关闭和处理所有数据库对象的角度来看,这是否是一种进行数据访问的好方法?例如:VB.NET:嵌套“;使用;用于数据库访问,vb.net,ado.net,using,Vb.net,Ado.net,Using,我想知道,从正确关闭和处理所有数据库对象的角度来看,这是否是一种进行数据访问的好方法?例如: Using conn As New SqlConnection(MyConnectionString) Using cmd As New SqlCommand("some SQL here", conn) ... add parameters ... conn.Open() Using dr As SqlDataReader = cmd.ExecuteReader()
Using conn As New SqlConnection(MyConnectionString)
Using cmd As New SqlCommand("some SQL here", conn)
... add parameters ...
conn.Open()
Using dr As SqlDataReader = cmd.ExecuteReader()
While dr.Read()
... do stuff ...
Wend
End Using
End Using
End Using
嵌套
是否像可接受的做法一样使用?如果我在Read()循环中的某个点退出该方法,那么像这样使用会确保所有对象都被正确清理吗?是的,这是可以的。始终调用IDisposable对象的Dispose方法
PS:在这种情况下,Dispose方法还包含Close方法。是的,这是可以的。始终调用IDisposable对象的Dispose方法
PS:在这种情况下,Dispose方法还包含Close方法。使用
可以保证在隐式try/finally
块中有序地进行处理
' THE FOLLOWING TRY CONSTRUCTION IS EQUIVALENT TO THE USING BLOCK
Dim resource As New resourceType
Try
' Insert code to work with resource.
Catch ex As Exception
' Insert code to process exception.
Finally
' Insert code to do additional processing before disposing of resource.
resource.Dispose()
End Try
嵌套using以类似的方式工作。如果退出一个代码块,它将执行finally
块,并正确处理对象
使用
可以保证在隐式的try/finally
块中有序地进行处理
' THE FOLLOWING TRY CONSTRUCTION IS EQUIVALENT TO THE USING BLOCK
Dim resource As New resourceType
Try
' Insert code to work with resource.
Catch ex As Exception
' Insert code to process exception.
Finally
' Insert code to do additional processing before disposing of resource.
resource.Dispose()
End Try
嵌套using以类似的方式工作。如果退出一个代码块,它将执行finally
块,并正确处理对象
要添加,Using块将“幕后”添加Try Finally语句。在finally语句中,它将对对象调用IDisposable.Dispose。换句话说,无论您做什么或发生什么,对象都将被处理。要添加,Using块将“幕后”添加Try Finally语句。在finally语句中,它将对对象调用IDisposable.Dispose。换句话说,无论您做什么或发生什么,对象都会被处理。您正在编写VB.Net,因此这只适用于部分情况,但对于使用StyleCop的C#人员来说,这样的多个对象将导致异常
关于stylecop中该规则的有用性,在反对意见链接中有一个很长的部分
我不会对你是否应该在你的VB.Net代码中注意StyleCops对C的警告做出判断。你正在编写VB.Net,所以这只是部分适用,但对于使用StyleCop的C人员来说,类似的多个会导致异常
关于stylecop中该规则的有用性,在反对意见链接中有一个很长的部分
我不会对你是否应该注意VB.Net代码中关于C#的StyleCops警告做出判断。我从来不知道using语句本质上是try/finally。我总是用try/catch/finally来处理我的连接+1.关于有用的提示。听起来不错。。如果我在任何时候显式退出该方法,它仍然适用吗?例如,如果我的SQL是来自…
的计数(*),并且我使用语句Return cmd.ExecuteScalar()
。它将在结束Using
s之前退出该方法,但它仍然会清理吗?是的,它应该按照正确的顺序触发所有finally
块。我从来不知道Using语句本质上是try/finally。我总是用try/catch/finally来处理我的连接+1.关于有用的提示。听起来不错。。如果我在任何时候显式退出该方法,它仍然适用吗?例如,如果我的SQL是来自…
的计数(*),并且我使用语句Return cmd.ExecuteScalar()
。它将在结束使用
s之前退出该方法,但它仍然会清理吗?是的,它应该按照正确的顺序触发所有最后
块。谢谢。。嵌套使用是不明智的,还是这只是StyleCop的一个怪癖?@Component_15939我猜规则主要针对第三方实现。对于MS代码,例如,假设它遵循适当的处理技术/模式,我们是非常安全的,因此如果IDisposable对象是框架对象,那么您可能可以使用多个USE语句。谢谢。。嵌套使用是不明智的,还是这只是StyleCop的一个怪癖?@Component_15939我猜规则主要针对第三方实现。对于MS代码,比如说,假设它遵循适当的处理技术/模式,我们是非常安全的,所以如果IDisposable对象是框架对象,那么您可以使用多个using语句。