Member 13765884 Ответов: 4

Обновить выбранную строку базы данных


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

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


private void Start_Click(object sender, EventArgs e)
{
    MAcon.Open();
    OleDbCommand cm = new OleDbCommand("UPDATE [Production] SET [Product Status]=@ProductStatus WHERE [OrderID]=@OrderID", MAcon);
    cm.Parameters.AddWithValue("@ProductStatus", Access.Text);
    cm.Parameters.AddWithValue("@OrderID", OrderIDTxt.Text);
    cm.ExecuteNonQuery();
    MAcon.Close();
}





Таким образом, т. е. выбрана строка один - когда пользователь нажимает кнопку Пуск - строка 1, статус продукта должен говорить "производство начато".

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

{
    MAcon.Open();
    OleDbCommand cm = new OleDbCommand("UPDATE [Production] SET [Product Status]=@ProductStatus WHERE [OrderID]=@OrderID", MAcon);
    cm.Parameters.AddWithValue("@ProductStatus", Access.Text);
    cm.Parameters.AddWithValue("@OrderID", OrderIDTxt.Text);
    cm.ExecuteNonQuery();
    MAcon.Close();
}

Wendelius

Cn вы публикуете примерные данные а также пример того что должно быть обновлено

Member 13765884

Сделано, но я не уверен, что это тот тип примера, который вы искали

Wendelius

Я пытаюсь лучше понять эту проблему. Можете ли вы объяснить более подробно, что вы пытаетесь сделать, а что не работает?

Member 13765884

Теперь я улучшил этот вопрос

4 Ответов

Рейтинг:
2

Wendelius

На ум приходят три вещи..

Как и предполагалось, команда может обновить больше строк, чем вы ожидаете. ExecuteNonQuery возвращает целое число, сколько строк было затронуто командой. Вы должны исследовать, что он возвращает 1. например:

...
int affected = cm.ExecuteNonQuery();
if (affected != 1) {
   MessageBox.Show(affected.ToString());
}
...


Также, как и предполагалось, существует вероятность того, что код будет выполнен для всех строк. Самый простой способ увидеть это-установить точку останова в начале метода и посмотреть, когда она будет достигнута.

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


Рейтинг:
0

OriginalGriff

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


Maciej Los

5ed!

Рейтинг:
0

Gerry Schmitz

Вы должны подтвердить, что "Access.Text" на самом деле содержит то, что вы думаете, что он делает.

cm.Parameters.AddWithValue("@ProductStatus", Access.Text);


Maciej Los

5ed!

Рейтинг:
0

Patrice T

Предполагая, что заказ содержит более 1 продукта, вам нужно указать, какой продукт или строку в заказе вы хотите обновить, в противном случае все продукты заказа будут обновлены.
Этот SQL-код обновляет только 1 строку.
Вам нужно проверить, выполняется ли этот код более одного раза.
Один из способов сделать это-добавить текстовое поле и добавлять некоторый текст каждый раз, когда выполняется код. включите "Кодзаказа".
Другой способ-использовать отладчик, чтобы увидеть, что делает ваш код.
-----
Ваш код ведет себя не так, как вы ожидаете, и вы не понимаете, почему !

Существует почти универсальное решение: запускайте свой код на отладчике шаг за шагом, проверяйте переменные.
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не знает, что вы должны делать, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.
Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]
Отладка кода C# в Visual Studio - YouTube[^]
Отладчик здесь только для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.


Member 13765884

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

Patrice T

Определите, что находится в порядке.
Вы показываете datagrid ?
показываете ли вы 1 строку на заказ ?