【问题标题】:How to Fix C# ExecuteNonQuery Error (0x80040E14)如何修复 C# ExecuteNonQuery 错误 (0x80040E14)
【发布时间】:2018-07-11 14:17:27
【问题描述】:

我正在尝试将密码插入 MS Access 数据库,但运行时出现以下错误,但由于某种原因无法使 ExecuteNonQuery() 函数工作。

我正在尝试将文本框 password 中的字符串插入到表 Password 中的列 password 中。

我收到此错误:

System.Data.OleDb.OleDbException (0x80040E14):INSERT INTO 语句中的语法错误。 在 System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult 小时) 在 System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams,对象和 executeResult) 在 System.Data.OleDb.OleDbCommand.ExecuteCommandText(对象和执行结果) 在 System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior 行为,对象和 executeResult) 在 System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior 行为,字符串方法) 在 System.Data.OleDb.OleDbCommand.ExecuteNonQuery() 在 C:\Users\Mahir\source\repos\Insert Test\Insert Test\Form1.cs:line 43 中的 Insert_Test.Form1.pass_btn_Click(Object sender, EventArgs e)

这是我使用的代码:

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 注入的攻击。始终,始终使用参数化查询。
  • 错误信息是Syntax error in INSERT INTO statement,所以检查password.textcommand.CommandText的值是什么

标签: c# sql ms-access


【解决方案1】:

密码是关键字。您已经正确地转义了列名,但没有转义表名。这也需要方括号:

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

请注意,您的代码有 2 个主要缺陷:1. 存在 SQL 注入风险。 2.它将密码存储为纯文本。对于实际使用的应用程序,这两者都是大禁忌,因此请仔细阅读参数化查询和散列密码。

【讨论】:

  • 非常感谢,已解决。关于 SQL 注入而不是散列问题,我知道这些缺陷,但由于这只是一个测试,所以我是唯一将使用该程序的人。无论如何,再次感谢您,祝您有愉快的一天。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多