【发布时间】:2017-04-30 08:39:31
【问题描述】:
当我针对以下代码运行代码分析时:
Protected Function GetOrderEntry() As IList(Of OE)
Dim results As IList(Of OE) = New List(Of OE)()
Using connection As IDbConnection = DbProviderFactories.GetFactory("System.Data.SqlClient").CreateConnection()
connection.ConnectionString = ConfigurationManager.AppSettings("OrderEnterConnection")
Using command As IDbCommand = connection.CreateCommand()
command.CommandTimeout = 120
command.CommandText = "Exec up_ViewOrderDetail_2012_Order '" & MemberNo1.Value & "','" & CustNo.Value & "','DEFAULT','" & OrderNo.Value & "','" & DeliveryDate.SelectedDate & "','','','','1'"
connection.Open()
Try
Dim reader As IDataReader = command.ExecuteReader()
results = PopulateGrid(reader)
Catch ex As SqlException
results.Clear()
connection.Close()
End Try
End Using
End Using
Return results
End Function
...我明白了,
"CA2202 不要多次释放对象 对象“连接”可以在方法“OrderConfirm.GetOrderEntry()”中多次释放。为避免生成 System.ObjectDisposedException,您不应多次调用 Dispose在一个物体上"
光标在最后的“结束使用”行;这如何被视为对象的双重处置?不是两个“Using”块都需要这样终止吗?
【问题讨论】:
-
stackoverflow.com/q/14706523/1070452 没有必要关闭连接,处理它就可以了。另一方面,该读者也应该被处置(好吧,无论如何,它们都是 IDisposable)
标签: sql-server vb.net using-statement idbcommand idbconnection