Surajevan Ответов: 4

Как я могу решить проблему "фатальная ошибка, возникшая во время выполнения команды" erro


Не могли бы вы, ребята, помочь мне решить эту проблему? Когда я собираюсь вставить данные в базу данных, у меня есть "
fatal error encountered during command execution
" Ошибка. Так что не могли бы вы помочь мне с моим кодом, есть ли в нем какая-нибудь ошибка?

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

private void btn_save_Click(object sender, EventArgs e)
{
    try
    {
        for (int i = 0; i < dataGridView1.Rows.Count; i++)
        {
            MySqlCommand cmd3 = new MySqlCommand();
            cmd3.Connection = con;

            cmd3.CommandText = "insert into sales-product(sales-id, product-name, qty, price, gross-total)values(@sales-id, @product-name, @qty, @price, @gross-total)";
            cmd3.Parameters.AddWithValue("@sales-id", lbl_invoice.Text);
            cmd3.Parameters.AddWithValue("@product-name", dataGridView1.Rows[i].Cells[2].Value);
            cmd3.Parameters.AddWithValue("@qty", dataGridView1.Rows[i].Cells[3].Value);
            cmd3.Parameters.AddWithValue("@price", dataGridView1.Rows[i].Cells[4].Value);
            cmd3.Parameters.AddWithValue("@gross-total", dataGridView1.Rows[i].Cells[5].Value);

            MySqlCommand cmd4 = new MySqlCommand();
            cmd4.Connection = con;

            cmd4.CommandText = "insert into sales(id, date, time, qty, gross-total)values(@id, @date, @time, @qty, @gross-total)";
            cmd4.Parameters.AddWithValue("@id", lbl_invoice.Text);
            cmd4.Parameters.AddWithValue("@date", lbl_date.Text);
            cmd4.Parameters.AddWithValue("@time", lbl_time.Text);
            cmd4.Parameters.AddWithValue("@qty", lbl_items.Text);
            cmd4.Parameters.AddWithValue("@gross-total", lbl_total.Text);

            con.Open();
            cmd3.ExecuteNonQuery();
            cmd4.ExecuteNonQuery();
            MessageBox.Show("Record Successfully Inserted !!");
            con.Close();
        }
    }

    catch (Exception ee)
    {
        MessageBox.Show(ee.Message, "Record Not Successfully Inserted !!");
    }
}

W∴ Balboos, GHB

Отладчик ....???

4 Ответов

Рейтинг:
0

Gerry Schmitz

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

Может быть, рассмотрим "сделку".


Рейтинг:
0

Richard MacCutchan

cmd3.ExecuteNonQuery();
cmd4.ExecuteNonQuery();
MessageBox.Show("Record Successfully Inserted !!");

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


Рейтинг:
0

RickZeeland

Если вы используете автоматическое увеличение поле id, оно не должно быть включено в запрос insert.


Рейтинг:
0

Richard Deeming

Цитата:
cmd3.CommandText = "insert into sales-product(sales-id, product-name, qty, price, gross-total)values(@sales-id, @product-name, @qty, @price, @gross-total)";
...
cmd4.CommandText = "insert into sales(id, date, time, qty, gross-total)values(@id, @date, @time, @qty, @gross-total)";

Имена таблиц, столбцов и параметров без кавычек могут не содержать знака минус (-Они могут содержать только буквы, цифры, подчеркивания. (_), или знак доллара ($).

MySQL :: MySQL 8.0 Справочное Руководство :: 9.2 Имена Объектов Схемы[^]

Если это вообще возможно, вы должны переименовать свои столбцы, чтобы следовать этим правилам. Если нет, то вам нужно будет процитировать их в любом запросе.
cmd3.CommandText = "insert into `sales-product` (`sales-id`, `product-name`, qty, price, `gross-total`) values (@SalesId, @ProductName, @qty, @price, @GrossTotal)";
...
cmd4.CommandText = "insert into sales (id, date, time, qty, `gross-total`) values (@id, @date, @time, @qty, @GrossTotal)";