Мое соединение уже открыто, но почему система сказала, что оно закрыто?

ExecuteNonQuery requires an open and available Connection. The connection's current state is closed.

Почему система всегда возвращает это сообщение?

У меня есть саб:

Private Sub Initialization()    

    If myCEConnection.State = ConnectionState.Closed Then '--> *1
        Try
            myCEConnection.Open()
        Catch ex As Exception

        End Try
    End If

    Dim reader As SqlCeDataReader
    Dim myCommand As SqlCeCommand = myCEConnection.CreateCommand()

    myCommand.CommandText = "Command goes here"
    Try
        reader = myCommand.ExecuteReader() 
    Catch ex As Exception '--> *2

    End Try

    myCEConnection.Close()
End Sub

И я вызвал эту функцию из этого подпункта:

Public myCEConnection As New SqlCeConnection("Connection String Goes Here")

Private Sub Report()
    If myCEConnection.State = ConnectionState.Closed Then '--> *1
        Try
            myCEConnection.Open()
        Catch ex As Exception

        End Try
    End If

    Initialization()

    myCEConnection.Close()
End Sub

Когда я пытаюсь установить точку останова на *1 линия, система возвращает myCEConnection.State = Open {1}, Но когда я продолжаю работать точку останова, на линии *2 Я получил: ExecuteReader requires an open and available Connection. The connection's current state is Closed.

Что не так с кодом?

Примечание. Каждая подпрограмма / функция в классе всегда имеет If myCeConnection.State = ..... Часть для проверки соединения уже открыта или нет. Может быть, это вызвало проблему, но я не совсем уверен.

1 ответ

Решение

Вам необходимо связать соединение и команду:

myCommand.Connection = myCEConnection

Также подумайте о том, чтобы изменить код на что-то вроде этого:

Dim reader As SqlCeDataReader

Using myCEConnection As New SqlCeConnection("Connection String Goes Here")
  myCEConnection.Open()
  Using myCommand As SqlCeCommand = myCEConnection.CreateCommand()
    myCommand.Connection = myCEConnection
    myCommand.CommandText = "Command goes here"
    reader = myCommand.ExecuteReader()
  End Using
End Using

Вам на самом деле не нужны Try-Catch'ы, и я предполагаю, что myCEConnection.Open() создает исключение, но вы никогда не увидите его из-за Try-Catch.

Другие вопросы по тегам