Member 14152185 Ответов: 1

Как мне решить эти проблемы


The connection was not closed. The connection's current state is open. 


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

Line 37:                    
Line 38:                    
Line 39:                     conn.Open();
Line 40:                     cmd.ExecuteNonQuery();
Line 41:                     conn.Close();

1 Ответов

Рейтинг:
0

OriginalGriff

Это означает, что соединение, которое вы пытаетесь открыть, уже открыто.
И это означает, что вы повторно используете соединение, и где-то вы не закрываете его должным образом, когда вы закончите с ним.

Лучший способ справиться с этим-не "перерабатывать" соединения, а создавать их, когда они вам нужны внутри системы. using блок. Таким образом, они закрываются и удаляются автоматически, когда выходят за пределы области действия:

using (SqlConnection con = new SqlConnection(strConnect))
    {
    con.Open();
    using (SqlCommand cmd = new SqlCommand("SELECT Id, description FROM myTable", con))
        {
        using (SqlDataReader reader = cmd.ExecuteReader())
            {
            while (reader.Read())
                {
                int id = (int) reader["Id"];
                string desc = (string) reader["description"];
                Console.WriteLine("ID: {0}\n    {1}", id, desc);
                }
            }
        }
    }


OriginalGriff

И что происходит, когда вы используете именно этот код?
Кстати: никогда не пишите SQL таким образом:
Вставить в MyTable значения(...)
Всегда называйте столбцы в том порядке, в котором вы предоставляете для них данные:
Вставить в таблицу mytable (Столбец1, Столбец2, ...) значения (@С1 @С2, ...)
Таким образом, изменения БД не повлияют на ваш код, а значения идентификаторов не вызовут проблем.