Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VB.NET:嵌套“;使用;用于数据库访问_Vb.net_Ado.net_Using - Fatal编程技术网

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语句。