Member 14729532 Ответов: 2

Как решить ошибку количество значений запроса и полей назначения не совпадают. В приложении C# windows


im попытался сделать форму покупки в настольном приложении visual studio с помощью кода C#. я попробовал этот код, чтобы сохранить значения textbox, datetime и datagrideview colums value в таблицу базы данных, и я проверяю таблицу и запрашиваю ее то же самое, но я получил "количество значений запроса и полей назначения не совпадают", пожалуйста, помогите мне решить эту ошибку.

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

for (int i = 0; i < dataGridView3.Rows.Count; i++)
{
cmd.CommandText = "Insert into purchase values('" + textBox1.Text + "','" + textBox17.Text + "','" + dateTimePicker1.Text + "','" + textBox2.Text + "','" + textBox3.Text + "','" + textBox4.Text + "','" + dataGridView3.Rows[i].Cells["Product_ID"].Value + "','" + dataGridView3.Rows[i].Cells["Product_Name"].Value +"','" + dataGridView3.Rows[i].Cells["Product_Type"].Value + "','" + dataGridView3.Rows[i].Cells["Product_Price"].Value + "','" + dataGridView3.Rows[i].Cells["Product_Qty"].Value + "','" + dataGridView3.Rows[i].Cells["Amount"].Value + "','" + textBox10.Text + "','" + textBox11.Text + "','" + textBox12.Text + "','" + textBox13.Text + "','" + textBox14.Text + "','" + textBox18.Text + "','" + textBox15.Text + "')";
        cmd.Connection = connection;
        connection.Open();
        cmd.ExecuteNonQuery();
        connection.Close();
}

		    
                    

2 Ответов

Рейтинг:
1

Patrice T

Цитата:
Как решить ошибку количество значений запроса и полей назначения не совпадают. В приложении C# windows

Довольно просто: подсчитайте количество значений в запросе, подсчитайте количество полей в таблице, там должен быть сюрприз.
После этого вам нужно посмотреть, как совпадают значения и поля.
Мы не можем сделать это за вас.
cmd.CommandText = "Insert into purchase values('" + textBox1.Text + "','" + textBox17.Text + "','" + dateTimePicker1.Text + "','" + textBox2.Text + "','" + textBox3.Text + "','" + textBox4.Text + "','" + dataGridView3.Rows[i].Cells["Product_ID"].Value + "','" + dataGridView3.Rows[i].Cells["Product_Name"].Value +"','" + dataGridView3.Rows[i].Cells["Product_Type"].Value + "','" + dataGridView3.Rows[i].Cells["Product_Price"].Value + "','" + dataGridView3.Rows[i].Cells["Product_Qty"].Value + "','" + dataGridView3.Rows[i].Cells["Amount"].Value + "','" + textBox10.Text + "','" + textBox11.Text + "','" + textBox12.Text + "','" + textBox13.Text + "','" + textBox14.Text + "','" + textBox18.Text + "','" + textBox15.Text + "')";

Не обязательно решение вашего вопроса, но у вас есть еще одна проблема.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь к уязвимости под названием "SQL-инъекция", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа выйдет из строя. Если пользователь вводит имя, например "Брайан О'Коннер", может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция - Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL-инъекция - руководство пользователя[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? - Обмен Стеками Информационной Безопасности[^]


Maciej Los

5ed!

Patrice T

Спасибо

Рейтинг:
1

Maciej Los

Сообщение об ошибке "number of query values and destination fields are not same- его довольно легко обнаружить и починить...

Все, что вам нужно сделать, это определить количество полей, в которые вы хотите вставить данные:

INSERT INTO purchase (field1, field2, ..., fieldN)
VALUES(value1, value2, ..., valueN)


В соответствии с инструкцией, приведенной в решении № 1, Patrice T, вам нужно использовать параметры. Так,
INSERT INTO purchase (field1, field2, ..., fieldN)
VALUES(@param1, @param2, ..., @paramN)


Как добавить параметры? Пожалуйста, прочтите это: Класс SqlParameter (System.Data.SqlClient) | Microsoft Docs[^]