Member 12179104 Ответов: 1

База данных Access не обновляется должным образом


Я создавал программное обеспечение на C#. Я попытался обновить некоторую информацию в своей базе данных Access. Вот мои поля базы данных.Дата, total_h, W_hours, delay_h. Дата-это первичный ключ. Поэтому я хочу обновить данные, где Date= "datetimePicker. text". вот код, который я попробовал.

try
{
    connection.Open();
    OleDbCommand cmd = new OleDbCommand();
    cmd.Connection = connection;               
    string update = "update summery_data set total_h='"+tHour+"', delay_h='"+delay+"' WHERE Date= " + dateTimePicker1.Text + " ";      
                    cmd.CommandText = update;
                    cmd.ExecuteNonQuery();
                    MessageBox.Show(" Updated successfully");
                    connection.Close();
}
catch(Exception ex)
{
    MessageBox.Show(ex.Message);
}


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

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

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

0x01AA

Проверьте возвращаемое значение OleDbCommand. Он возвращает "количество затронутых строк". Скорее всего, это ноль, потому что, скорее всего, ваше предложение WHERE не совпадает.

1 Ответов

Рейтинг:
1

OriginalGriff

Не делай этого так. Не объединяйте строки для построения SQL-команды. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого используйте параметризованные запросы.
Скорее всего, это одновременно вылечит вашу проблему: очень вероятно, что предложение WHERE не соответствует никаким записям.

string update = "update summery_data set total_h=@TH, delay_h=@DH WHERE Date=@DAT";
cmd.CommandText = update;
cmd.Parameters.AddWithValue("@TH", tHour);
cmd.Parameters.AddWithValue("@DH", delay);
cmd.Parameters.AddWithValue("@DAT",dateTimePicker1.Value);


Maciej Los

5ед!