2016-03-23 2 views
-1

Я нахожусь в веб-приложении, когда я нажимаю, чтобы извлекать данные из базы данных, я получаю следующую ошибку:«ExecuteReader требует открытого и доступного соединения. Текущее состояние соединения закрыто». on WebForm

ExecuteReader требует открытого и доступного соединения. Текущее состояние соединения закрыто.

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

Я объявляю мое соединение на отдельном классе, как следующее:

public Database() 
{ 
    valid = false; 

    using (connection = new SqlConnection(connectionString))  
    {     
     connection.Open(); 
    }  
} 

Где я получаю сообщение об ошибке:

enter image description here

и я называю это из WebForm. Почему я получаю эту ошибку, когда соединение уже открыто (я использовал соединение odbc, и он работает нормально, однако SqlConnection не работает)

В чем причина?

+2

Я не вижу вызов 'ExecuteReader': пожалуйста покажите код, который будет воссоздавать вашу проблему. – Richard

+0

Не могли бы вы разместить код, в котором вы действительно получаете исключение? Также было бы неплохо, если бы вы могли очистить код, который вы отправляете (например, удалив закомментированные части). –

+0

'Почему я получаю эту ошибку, когда соединение уже открыто? Я согласен, это невероятно озадачивает, поскольку нет реального вызова или даже создания экземпляра' SqlDataReader'. – CodingGorilla

ответ

1

SQL соединение открыто в использовании рамки только:

using (var connection = new SqlConnection(connectionString)) { 
    connection.Open(); // open here 
    ... 
    } // close here 

Так положить команду (ы) в using объем:

using (var connection = new SqlConnection(connectionString)) { 
    connection.Open(); 

    // command creation and execution should be within connection "using" scope 
    using (var q = new SqlCommand()) { 
     q.Connection = connection; 
     ... 

     // reader should be within command "using" scope 
     using (var reader = q.ExecuteReader()) { 
     ... 
     } 
    } 
    ... 
    } // close here