#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?