我正在尝试将密码插入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
答案 0 :(得分:4)
密码是关键字。您已正确转义了列名,但未对表名进行转义。这也需要方括号:
INSERT INTO [Password] ([password]) VALUES('" + password.Text + "')"
请注意,您的代码有2个主要缺陷:1.存在注入SQL的风险。 2.它将密码存储为纯文本。对于实际使用的应用程序,这两个都是大禁忌,因此请阅读参数化查询和哈希密码。