Как я могу предотвратить этот код от удаления объектов несколько раз?

Когда я запускаю анализ кода со следующим кодом:

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
Другие вопросы по тегам