2017-06-21 120 views
0

我无法弄清楚我的代码出了什么问题。我试图通过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); 
     } 



    } 
+1

通常,语法例外声明它认为不正确的字符位置或确切的语法片段。这通常是发现问题的一个重要线索。你能粘贴完整的异常消息吗? –

+0

也许'位置'是一个保留字。然后:'[位置]'。 – Gustav

回答

0

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中使用,因此其使用保留字必须放在里面每个事件方括号。

-1

尝试一些类似这样的:

cmd.Parameters.Add(new OleDbParameter("@FirstName","'" + Fname "'")); 

与字符串参数单棚。

相关问题