Я пытаюсь вставить данные клиентов в базу данных, но получаю это исключение

Подключение должно быть действующим и открытым. в MySql.Data.MySqlClient.MySqlCommand.Throw (Exception ex) в MySql.Data.MySqlClient.MySqlCommand.CheckState () в MySql.Data.MySqlClient.MySqlCommand..DExataClientMySqlClient. () в MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery () в book_online.saveClient_Click (отправитель объекта, EventArgs e)

MySqlConnection con = new MySqlConnection();
con.ConnectionString = ConfigurationManager.ConnectionStrings("conio").ConnectionString();
MySqlCommand cmd = new MySqlCommand();
cmd.CommandText = "INSERT INTO clientsDetails (clientName, companyAddress, city, contactPersonName, contactNumber1) Values(@clientName, @companyAddress, @city, @contactPersonName, @contactNumber1)";
cmd.Parameters.AddWithValue("@clientName", companyName.Text);
cmd.Parameters.AddWithValue("@companyAddress", companyAddress.Text);
cmd.Parameters.AddWithValue("@city", companyCity.Text);
cmd.Parameters.AddWithValue("@contactPersonName", concernPersonName.Text);
cmd.Parameters.AddWithValue("@contactNumber1", countryCodeWithNumber);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
1
SUN 5 Сен 2016 в 08:11

3 ответа

Лучший ответ

Итак, вы открыли соединение и выполнили команду, но вы забыли назначить соединение команде , тогда только код работает нормально, как вы ожидали. Настоятельно рекомендую вам использовать также. Тогда код будет выглядеть следующим образом:

using (MySqlConnection con = new MySqlConnection())
{
    con.ConnectionString = ConfigurationManager.ConnectionStrings("conio").ConnectionString();
    string queryText = "INSERT INTO clientsDetails (clientName, companyAddress, city, contactPersonName, contactNumber1) Values(@clientName, @companyAddress, @city, @contactPersonName, @contactNumber1)";
    using (MySqlCommand cmd = new MySqlCommand(queryText, con))
    {
        cmd.Parameters.AddWithValue("@clientName", companyName.Text);
        cmd.Parameters.AddWithValue("@companyAddress", companyAddress.Text);
        cmd.Parameters.AddWithValue("@city", companyCity.Text);
        cmd.Parameters.AddWithValue("@contactPersonName", concernPersonName.Text);
        cmd.Parameters.AddWithValue("@contactNumber1", countryCodeWithNumber);
        con.Open();
        cmd.ExecuteNonQuery();
    }
}
2
sujith karivelil 5 Сен 2016 в 05:16

В команде отсутствует строка подключения.

MySqlConnection con = new MySqlConnection();
con.ConnectionString = ConfigurationManager.ConnectionStrings("conio").ConnectionString();
MySqlCommand cmd = new MySqlCommand();
cmd.Connection = con;
cmd.CommandText = "INSERT INTO clientsDetails (clientName, companyAddress, city, contactPersonName, contactNumber1) Values(@clientName, @companyAddress, @city, @contactPersonName, @contactNumber1)";
cmd.Parameters.AddWithValue("@clientName", companyName.Text);
cmd.Parameters.AddWithValue("@companyAddress", companyAddress.Text);
cmd.Parameters.AddWithValue("@city", companyCity.Text);
cmd.Parameters.AddWithValue("@contactPersonName", concernPersonName.Text);
cmd.Parameters.AddWithValue("@contactNumber1", countryCodeWithNumber);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
1
Sandip - Full Stack Developer 5 Сен 2016 в 06:17

Вы не указали объект подключения для своей команды:

cmd.Connection = con;

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

using(MySqlConnection con = new MySqlConnection())
{
   con.ConnectionString =
                       ConfigurationManager.ConnectionStrings("conio").ConnectionString();

   MySqlCommand cmd = new MySqlCommand();
   cmd.CommandText = @"INSERT INTO clientsDetails
              (clientName, companyAddress, city, contactPersonName, contactNumber1)
               Values
              (@clientName, @companyAddress, @city, @contactPersonName, @contactNumber1)";

   cmd.Connection = con;
   cmd.Parameters.AddWithValue("@clientName", companyName.Text);
   cmd.Parameters.AddWithValue("@companyAddress", companyAddress.Text);
   cmd.Parameters.AddWithValue("@city", companyCity.Text);
   cmd.Parameters.AddWithValue("@contactPersonName", concernPersonName.Text);
   cmd.Parameters.AddWithValue("@contactNumber1", countryCodeWithNumber);
   con.Open();
   cmd.ExecuteNonQuery();
}

Для информации: ключевое слово using позволяет компиляции генерировать try...finally для закрытого блока и вызывает Dispose объекта внутри using (con в вашем case) внутри сгенерированного блока finally. Таким образом, ваше соединение гарантированно будет закрыто во всех случаях, когда это наконец гарантировано)

0
Zein Makki 5 Сен 2016 в 05:27