INSERT INTO语句中使用C#和ms-access的语法错误
问题描述:
我无法弄清楚我的代码出了什么问题。我试图通过C#在Access Db中添加一条记录,但遇到了一个异常,说我的SQL语句中有一个错误的语法。INSERT INTO语句中使用C#和ms-access的语法错误
private void buttonSUB_Click(object sender, EventArgs e)
{
string Adrs = textADRS.Text;
string Fname = textFN.Text;
string Mname = textMN.Text;
string Lname = textLN.Text;
string Pos = textPOS.Text;
try
{
OleDbConnection con = new OleDbConnection();
con.ConnectionString = @"Provider = Microsoft.ACE.OLEDB.12.0; Data Source = C:\\Users\\genesis\\Documents\\Database1.accdb";
OleDbCommand cmd = new OleDbCommand("Insert into Employees (FN,MN,LN,Address,Position) Values (@FirstName,@MidName,@LastName,@Address,@Position)",con);
cmd.Parameters.Add(new OleDbParameter("@FirstName", Fname));
cmd.Parameters.Add(new OleDbParameter("@MidName", Mname));
cmd.Parameters.Add(new OleDbParameter("@LastName", Lname));
cmd.Parameters.Add(new OleDbParameter("@Address", Adrs));
cmd.Parameters.Add(new OleDbParameter("@Position", Pos));
con.Open();
cmd.ExecuteNonQuery();
MessageBox.Show("Record Submitted", "Nice!");
con.Close();
}
catch (Exception ex) {
MessageBox.Show(ex.Message);
}
}
答
从Access SQL Reserved Words List,POSITION
已经定义为保留关键字。
如果您使用保留字或符号表中的命名字段, 警告您,这个词被保留,并且你可能指的是现场时 遇到错误。如果您使用保留字来命名控件,对象或变量,则可能还会遇到错误。
如果保留字已在使用中,则可避免使用括号([])围绕每个出现该单词的错误消息 。
因此,你需要添加方括号使用它作为表名:
OleDbCommand cmd = new OleDbCommand(
@"INSERT INTO Employees (FN, MN, LN, Address, [Position])
VALUES (@FirstName, @MidName, @LastName, @Address, @Position)", con);
注意:保留字不区分大小写在Access中使用,因此其使用保留字必须放在里面每个事件方括号。
答
尝试一些类似这样的:
cmd.Parameters.Add(new OleDbParameter("@FirstName","'" + Fname "'"));
与字符串参数单棚。
通常,语法例外声明它认为不正确的字符位置或确切的语法片段。这通常是发现问题的一个重要线索。你能粘贴完整的异常消息吗? –
也许'位置'是一个保留字。然后:'[位置]'。 – Gustav