C#ExecuteNonQuery错误

时间:2018-07-11 14:17:28

标签: c# sql .net ms-access

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

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

我收到此错误:

  

System.Data.OleDb.OleDbException(0x80040E14):INSERT INTO语句中的语法错误。      在System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)      在System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams,Object和executeResult)      在System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object&executeResult)      在System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior行为,对象和executeResult)      在System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior行为,String方法)      在System.Data.OleDb.OleDbCommand.ExecuteNonQuery()      在C:\ Users \ Mahir \ source \ repos \ Insert Test \ Insert Test \ Form1.cs:line 43

中的Insert_Test.Form1.pass_btn_Click(对象发件人,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

1 个答案:

答案 0 :(得分:4)

密码是关键字。您已正确转义了列名,但未对表名进行转义。这也需要方括号:

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

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