Member 13936784 Ответов: 1

Запрос обновления терпит неудачу в использовании datagirdview на C# - помогите плз


Привет

Я использую следующий код в кнопке "Сохранить" моего приложения windows
из c#. Я использую dataGridview с определенными столбцами для ввода данных.
Я использую цикл for datagirdview для вставки и обновления данных в таблицу.
Я могу вставить данные с помощью команды insert
но после редактирования записей в datagridview и после изменения строк,
этот следующий код обновляет все записи таблицы только с последней строкой datagridview, и нет никакого сообщения об ошибке. плз помогите решить эту проблему.

спасибо и с уважением

Мадху


кон.Открыть();

по каждому элементу (ячейки datagridviewrow строку в dataGridView1.Строк)
{
КМД = новая команда sqlcommand("ORDER_DETL обновить набор PROD_DESC = @б,качество =@с,sizecd=@д
где order_no = @a", con);
{

пробовать
{
cmd.параметры.AddWithValue ("@a", textBox1.Text);
cmd.параметры.AddWithValue("@b", строка.Ячейки["prod_desc"].значение);
cmd.параметры.AddWithValue("@c", строка.Ячейки["качество"].значение);
cmd.параметры.AddWithValue("@d", строка.Ячейки["sizecd"].значение);
УМК.Метод executenonquery();

}

поймать (исключение бывший)
{

}

}
}

Ящик для сообщений.Показать("запись обновлена");

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

Я предположил, что это не навигация между рядами сетки, которую я попробовал следующим образом.
Но это не работает.

int currentRow = dataGridView1.SelectedRows[0].Индекс;
if (currentRow < dataGridView1.RowCount)
{
dataGridView1.Rows[++currentRow].Selected = true;
}

Eric Lynch

Вы скрываете любые исключения, ловя их, ничего не делая. Покажите окно сообщения или войдите в него. И, если есть исключение, поделитесь этим исключением, это может помочь диагностировать проблему. Кроме того, ExecuteNonQuery возвращает количество фактически затронутых строк (в данном случае обновленных), вы также должны поделиться ими, чтобы помочь диагностировать проблему.

Member 13936784

Привет

После скрытия попробуйте поймать блоки,
он выдает следующее исключение,

Необработанное исключение типа "System.Data.SqlClient.SqlException" произошло в System.Data.dll

Дополнительная информация: параметризованный запрос '(@a nvarchar(1),@b nvarchar(4000),@c nvarchar(4000),@d nvarchar(' ожидает параметр @b, который не был указан.

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

с уважением

Мадху

1 Ответов

Рейтинг:
7

Richard Deeming

where order_no = @a
cmd.Parameters.AddWithValue("@a", textBox1.Text);

Текст внутри textBox1 не меняется между итерациями вашего цикла. Вы обновляете одну и ту же строку каждый раз.

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


Eric Lynch

Отличный улов и почти наверняка правильное решение!

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

С другой стороны, хвала OP за правильное использование параметров SQL. Приятно видеть это для разнообразия :)