yabaaa Ответов: 2

Как исправить неправильный синтаксис рядом с ключевым словом 'desc'


private void btnUpdate_Click(object sender, EventArgs e)
        {
            try
            {
                if (txtempid.Text == "")
                {
                    MessageBox.Show("Enter Employee Id To Update");
                }
                else
                {
                    SqlCommand cmdupdate = new SqlCommand("Update EmployeeDetails SET EmpName='" + txtEmpName.Text + "',EmpDesgn='" + txtEmpDegn.Text + "' ,EmpSalary='" + txtSalary.Text + "'  where EmpId=" + txtempid.Text + "", con);
                    con.Open();
                    cmdupdate.CommandType = CommandType.Text;
                    cmdupdate.ExecuteNonQuery();
                    MessageBox.Show("Data  Updated");
                }



            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                if (con.State == ConnectionState.Open)
                {
                    con.Close();
                }
            }
        }


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

эта ошибка происходит ony, когда я обновляю свои данные,но вставка, удаление и другие ошибки отсутствуют

jimmson

В коде нет ключевого слова desc.

F-ES Sitecore

Может быть, имя сотрудника-Джон О'Деск :)

jimmson

:) это вызвало у меня хороший смех, спасибо. Впрочем, ты прав.

2 Ответов

Рейтинг:
1

Patrice T

SqlCommand cmdupdate = new SqlCommand("Update EmployeeDetails SET EmpName='" + txtEmpName.Text + "',EmpDesgn='" + txtEmpDegn.Text + "' ,EmpSalary='" + txtSalary.Text + "'  where EmpId=" + txtempid.Text + "", con);

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


Рейтинг:
0

Andy Lanng

Пожалуйста, прочтите следующую статью:

Понимание SQL-инъекции и создание доказательства SQL-инъекции ASP.NET приложения[^]

Я исправил ваш код. Не на 100% Лучший способ, но, по крайней мере, вы не получите проблем с sql-инъекцией.

private void btnUpdate_Click(object sender, EventArgs e) {
            try {
                if (txtempid.Text == "") {
                    MessageBox.Show("Enter Employee Id To Update");
                }
                else {

                    var sql = "Update EmployeeDetails SET " +
                              "EmpName=@EmpName," +
                              "EmpDesgn=@EmpDesgn ," +
                              "EmpSalary=@EmpSalary  " +
                              "where EmpId=@EmpId";

                    using (SqlCommand cmdupdate = new SqlCommand(sql, con)) {
                        cmdupdate.Parameters.AddWithValue("@EmpName", txtEmpName.Text);
                        cmdupdate.Parameters.AddWithValue("@EmpDesgn", txtEmpDegn.Text);
                        cmdupdate.Parameters.AddWithValue("@EmpSalary", txtSalary.Text);
                        cmdupdate.Parameters.AddWithValue("@EmpId", txtempid.Text);
                        cmdupdate.CommandType = CommandType.Text;

                        con.Open();
                        cmdupdate.ExecuteNonQuery();
                        MessageBox.Show("Data  Updated");
                    }
                }
            }
            catch (Exception ex) {
                MessageBox.Show(ex.Message);
            }
            finally {
                if (con.State == ConnectionState.Open) {
                    con.Close();
                }
            }
        }