обновление c # oledb

#c#

#c#

Вопрос:

Я пытаюсь обновить одно значение в своей базе данных access .accdb через интерфейс c # winform. мой оператор SQL:

     updateString("UPDATE Password_Table SET Password = '"   confirmnewpasswordTextBox.Text   "' WHERE Password_ID = 'user'");
  

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

     public static bool updateString(string SQL)
    {
        using (var connection = new OleDbConnection(connectionString))
        using (var command = connection.CreateCommand())
        {
            connection.Open();

            command.CommandText = SQL;
            command.CommandType = CommandType.Text;

            try
            {
                return command.ExecuteNonQuery();
            }
            catch
            {
                return -1;//for error
            }
        }
    }
  

Спасибо!!

Обновить:

     System.Data.OleDb.OleDbException: Syntax error in UPDATE statement.
  

хммм, я все еще не могу понять, что не так, моя таблица — Password_Table, и я пытаюсь обновить столбец с именем Password, где Password_ID равен «user».

обновление: найдена ошибка! оказывается, пароль похож на ключевое слово с ограниченным доступом, и мне пришлось указать его в [ ], прежде чем он смог работать..

Ответ №1:

В вашем коде есть серьезные проблемы. Он уязвим для внедрения SQL. Вы всегда должны использовать параметризованные запросы, чтобы избежать этого. Например:

 public static string UpdatePassword(string user, string password)
{
    using (var connection = new OleDbConnection(connectionString))
    using (var command = connection.CreateCommand())
    {
        connection.Open();

        command.CommandText = "UPDATE Password_Table SET Password = @pwd WHERE Password_ID = @user";
        command.Parameters.AddWithValue("@pwd", password);
        command.Parameters.AddWithValue("@user", user);

        try
        {
            return command.ExecuteNonQuery();
        }
        catch
        {
            return -1;//for error
        }
    }
}
  

А затем вызывается следующим образом:

 int rowsAffetected = UpdatePassword("user", confirmnewpasswordTextBox.Text);
  

Теперь, если это возвращает 0, это означает, что в вашей базе данных нет записи, соответствующей Password_ID = user условию, и обновлять нечего.

Комментарии:

1. @user776914, поэтому генерируется исключение. Что это?

2. С тех пор я обновил вопрос с исключением. будет ли это исключение связано с command.commandtext?