Как исправить ошибку C# ExecuteNonQuery (0x80040E14)

Я пытаюсь вставить пароль в базу данных 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

К вашему сведению - ваш код уязвим для SQL-инъекций. Всегда, всегда используйте параметризованные запросы.

squillman 11.07.2018 16:20

Сообщение об ошибке - Syntax error in INSERT INTO statement, поэтому проверьте значение password.text и command.CommandText.

Rui Jarimba 11.07.2018 16:21
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
253
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Пароль - это ключевое слово. Вы правильно экранировали имя столбца, но не имя таблицы. Для этого также нужны квадратные скобки:

INSERT INTO [Password] ([password]) VALUES('" + password.Text + "')"

Обратите внимание, что ваш код имеет 2 основных недостатка: 1. Он подвержен риску внедрения SQL. 2. Он хранит пароли в виде простого текста. И то и другое является большим запретом для приложений, которые действительно используются, поэтому, пожалуйста, ознакомьтесь с параметризованными запросами и хэширующими паролями.

Большое спасибо, это исправило. Что касается SQL-инъекции, а не проблемы с хешированием, я знаю о недостатках, но поскольку это всего лишь тест, я буду единственным, кто будет использовать эту программу. В любом случае еще раз спасибо и хорошего дня.

beannshie223 11.07.2018 16:31

Другие вопросы по теме