Я пытаюсь вставить пароль в базу данных MS Access, но при запуске получаю следующую ошибку, но по какой-то причине я не могу заставить работать функцию ExecuteNonQuery().
Я пытаюсь вставить строку из текстового поля password в столбец password в таблице Password.
Я получаю такую ошибку:
System.Data.OleDb.OleDbException (0x80040E14): Syntax error in INSERT INTO statement. at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr) at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult) at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult) at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult) at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method) at System.Data.OleDb.OleDbCommand.ExecuteNonQuery() at Insert_Test.Form1.pass_btn_Click(Object sender, EventArgs e) in C:\Users\Mahir\source\repos\Insert Test\Insert Test\Form1.cs:line 43
Это код, который я использую:
private OleDbConnection connection = new OleDbConnection();
string database = Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location) + "\\password.accdb";
connection.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source = " + database + ";Jet OLEDB:Database Password=12345678;";
try {
connection.Open();
OleDbCommand command = new OleDbCommand();
command.Connection = connection;
command.CommandText = "INSERT INTO Password ([password]) VALUES('" + password.Text + "')";
command.ExecuteNonQuery(); // this is line 43
MessageBox.Show("Success");
connection.Close();
} catch (Exception ex) {
MessageBox.Show(Convert.ToString(ex));
}
Я использую базу данных MS Access 2010 с именем «password.accdb» с паролем «12345678».
Вот полный код: https://pastebin.com/D1xQ2LVg
Сообщение об ошибке - Syntax error in INSERT INTO statement, поэтому проверьте значение password.text и command.CommandText.





Пароль - это ключевое слово. Вы правильно экранировали имя столбца, но не имя таблицы. Для этого также нужны квадратные скобки:
INSERT INTO [Password] ([password]) VALUES('" + password.Text + "')"
Обратите внимание, что ваш код имеет 2 основных недостатка: 1. Он подвержен риску внедрения SQL. 2. Он хранит пароли в виде простого текста. И то и другое является большим запретом для приложений, которые действительно используются, поэтому, пожалуйста, ознакомьтесь с параметризованными запросами и хэширующими паролями.
Большое спасибо, это исправило. Что касается SQL-инъекции, а не проблемы с хешированием, я знаю о недостатках, но поскольку это всего лишь тест, я буду единственным, кто будет использовать эту программу. В любом случае еще раз спасибо и хорошего дня.
К вашему сведению - ваш код уязвим для SQL-инъекций. Всегда, всегда используйте параметризованные запросы.