我想知道这是否是一种很好的数据访问方式,所有数据库对象都被正确关闭和处理?例如:
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
嵌套Using
是否可以接受?如果我在Read()循环中的某个点退出方法,那么使用这样的Using
是否可以确保所有对象都被正确清理?
答案 0 :(得分:2)
Using
保证在隐式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
嵌套使用以类似的方式工作。如果退出代码块,它将执行finally
块,并正确处理您的对象。
http://msdn.microsoft.com/en-US/library/htd05whh(v=VS.80).aspx
答案 1 :(得分:1)
要添加,Using块将“在幕后”添加Try Finally语句。在finally语句中,它将在对象上调用IDisposable.Dispose。换句话说,无论你做什么或发生什么,对象都会被处理掉。
答案 2 :(得分:0)
是的,这没关系。始终调用IDisposable对象的Dispose方法。
PS:在这种情况下,Dispose方法还包含Close方法。
答案 3 :(得分:0)
你正在编写VB.Net,所以这只是部分适用,但是对于那些使用StyleCop的C#人来说,像这样的多个using statements会导致异常2202 in StyleCop。
关于此规则在stylecop中的用处,msdn链接上有一段很长的反对意见。
我不会判断您是否应该在VB.Net代码中注意C#的StyleCops警告。