Cricket_Fan Ответов: 3

Связь не была закрыта. Текущее состояние соединения открыто. Как сделать в решить эту проблему?


У меня есть часть кода следующим образом, и он продолжает показывать ошибку "соединение не было закрыто. Текущее состояние соединения открыто.

private void load_gridview()
    {
        con.Open();
        SqlCommand cmd = new SqlCommand("SP_Display_Periodicals", con);
        cmd.CommandType = CommandType.StoredProcedure;
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        DataTable t1 = new DataTable();
        da.Fill(t1); 
        con.Close();

        if (t1.Rows.Count > 0)
        {
            GridView1.DataSource = t1.DefaultView;
            GridView1.DataBind();
        }

        else
        {
            GridView1.DataSource = null;
            GridView1.DataBind();
        }
        
    }
}






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

I've closed the connection but it still shows an error "The connection was not closed. The connection's current state is open."

3 Ответов

Рейтинг:
2

Patrice T

Цитата:
ошибка " соединение не было закрыто. Текущее состояние соединения открыто.

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

Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволяет вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения, это невероятный инструмент обучения.

Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010-YouTube[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.


Рейтинг:
1

JayantaChatterjee

эта ошибка означает, что вы открыли соединение, а затем попытались открыть это открытое соединение, не закрывая соединения..
Вам нужно проверить состояние соединения..

добавьте эту строку перед открытием соединения.

if( con.State==ConnectionState.Closed)
           {
               con.Open();
           }


Рейтинг:
0

OriginalGriff

Проверьте остальную часть вашего кода: где-то вы оставили его открытым.
Я бы предложил две вещи:
1) Не полагайтесь на один "глобальный" объект SqlConnection: создавайте их заново, когда они вам понадобятся, и избавляйтесь от них, когда закончите. usingблок-это очень хорошая идея:

using (SqlConnection con = new SqlConnection(strConnect))
   {
   con.Open();
   ...
   }
Таким образом, система будет обрабатывать закрытие и утилизацию за вас. Вы также должны использовать using блоки с SqlCommand и другими объектами также.
2) попробовать ... поймать...наконец, блок - это тоже хорошая идея!