Как я могу предотвратить этот код от удаления объектов несколько раз?
Когда я запускаю анализ кода со следующим кодом:
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 более одного раза для объекта".
Курсор находится на последней строке "End Using"; Как это рассматривается как двойное избавление от объектов? Разве оба блока "Использование" не должны быть завершены таким образом?
1 ответ
Решение
Я пытался удалить connection.createcommand
А также connection.Close()
, И это работало нормально
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 New IDbCommand
Command.connection = connection
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)
Reader.close()
Catch ex As SqlException
results.Clear()
End Try
End Using
End Using
Return results
End Function