Мое соединение уже открыто, но почему система сказала, что оно закрыто?
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.