Не обновлять базу данных MS Access с идентификатором - PullRequest
0 голосов
/ 29 декабря 2018

Я пытаюсь написать программу для обновления данных с идентификатором.Когда я пишу номер для идентификатора (например, id = 7), программа запускается и работает правильно.Но когда я пишу текст метки и конвертирую в число, код не обновляется и выдает ошибку.

Вот мой код:

private void yadda_saxla_update_Click(object sender, EventArgs e)
{
    connect.Open();  
    OleDbCommand cmd = new OleDbCommand();
    cmd.CommandText = "Update Guller set gulun_adi='"+gul_adi.Text+ "', sekil='" + gulun_adi_label.Text + "' where id='"+Convert.ToInt32( id_label.Text)+"'";

    // when i write "id=7" or other number data is update, 
    // but i want update with label text (  Convert.ToInt32( id_label.Text)  )
    // and gives error

    cmd.Connection = connect;
    cmd.ExecuteNonQuery();
    connect.Close();
    disp_data();
}

И ошибка следующая:

error

Что можноЯ делаю?Спасибо ...

1 Ответ

0 голосов
/ 29 декабря 2018

Как отметили другие в комментариях, вы должны не объединять пользовательские входные данные, потому что это дает атакующий вектор для SQL-инъекции .(или, по крайней мере, проверьте наличие вредных входных данных)

В противном случае, я думаю, решение состоит в том, что вы должны удалить ', потому что в данный момент команда в данный момент анализируется как varchar.Эта часть where id='"+Convert.ToInt32( id_label.Text)+"'" становится where id='7' вместо where id=7

Таким образом, если ваш идентификатор не хранится как varchar, эту строку следует изменить

cmd.CommandText = "Update Guller set gulun_adi='"+gul_adi.Text+ "', sekil='" + gulun_adi_label.Text + "' where id='"+Convert.ToInt32( id_label.Text)+"'";

на

cmd.CommandText = "Update Guller set gulun_adi='"+gul_adi.Text+ "', sekil='" + gulun_adi_label.Text + "' where id="+Convert.ToInt32( id_label.Text);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...