Paolo Tansengco Ответов: 2

Ошибка при подключении к базе данных с помощью VB


Мне нужна помощь с моими кодами и / или подключением.Я получаю ошибку, которая говорит::

Необработанное исключение типа ' System.InvalidOperationException ' произошло в System.Data.dll

Дополнительная информация: ExecuteReader требует открытого и доступного соединения. Текущее состояние соединения закрыто.


В этом коде: (строка 4)

cmd.Connection = cn
        cmd.CommandText = "SELECT ID, LastName, FirstName FROM tblMembers WHERE ID = @ID"
        cmd.Parameters.Add(New SqlClient.SqlParameter("@ID", SqlDbType.Int)).Value = dg1.Item(0, e.RowIndex).Value
        dr = cmd.ExecuteReader
        If dr.HasRows() Then
            With dr
                .Read()
                txtLname.Text = dr("LastName")
                txtFname.Text = dr("FirstName")
            End With
        End If


Но если я попытаюсь открыть соединение. Такое случается.

Необработанное исключение типа ' System.InvalidOperationException ' произошло в System.Data.dll

Дополнительная информация: соединение не было закрыто. Текущее состояние соединения открыто.


С этим кодом: (строка 1)

cn.Open()
        cmd.Connection = cn
        cmd.CommandText = "SELECT ID, LastName, FirstName FROM tblMembers WHERE ID = @ID"
        cmd.Parameters.Add(New SqlClient.SqlParameter("@ID", SqlDbType.Int)).Value = dg1.Item(0, e.RowIndex).Value
        dr = cmd.ExecuteReader
        If dr.HasRows() Then
            With dr
                .Read()
                txtLname.Text = dr("LastName")
                txtFname.Text = dr("FirstName")
            End With
        End If


Что я уже пробовал:

Я попытался запустить отладку, не открывая соединение, и он говорит, что мне нужно открыть соединение в строке 4 (Executereader), но если я открою соединение, он скажет, что соединение не было закрыто.

Patrice T

Покажите, что такое cn.

Paolo Tansengco

Спасибо за обратную связь, ребята. Я уже нашел решение с помощью нескольких настроек кода. все равно спасибо.

Karthik_Mahalingam

хороший

2 Ответов

Рейтинг:
2

Patrice T

Я подозреваю, что здесь есть проблема:

cn.Open()
cmd.Connection = cn

Но так как мы понятия не имеем, что это за объекты, то дать однозначный ответ невозможно.


Рейтинг:
0

Dave Kreskowiak

Недостаточно информации. Я предполагаю, что у вас есть код в другом месте, который открывает соединение, но никогда не закрывает его.

Все объекты соединения должны быть созданы и удалены, когда вы закончите с ним. Очень простой способ сделать это - using заявление:

using (var conn = new SqlConnection(...))
{
    ... your command and query code goes here ...
}