2013-03-24 97 views
-1

我得到4200 Syntax Error,當我的MS Access數據庫執行此代碼:語法錯誤INSERT INTO使用OdbcConnection

protected void Button1_Click(object sender, EventArgs e) 
    { 
     using (OdbcConnection conn = new OdbcConnection(@"Dsn=ani;dbq=D:\anita\inventory\chemicals.accdb;defaultdir=D:\anita\inventory;driverid=25;fil=MS Access;maxbuffersize=2048;pagetimeout=5;uid=admin")) 
     { 
      conn.Open(); 
      string CommandText = "INSERT INTO SupplierDetails (ID, Supplier, Company, Address, State, Country, Pincode, PhoneNo, MobileNo, Email, Fax, RawMaterials, Note) VALUES (@ID, @Supplier, @Company, @Address, @State, @Country, @Pincode, @PhoneNo, @MobileNo, @Email, @Fax, @RawMaterials, @Note)"; 

      using (OdbcCommand cmd = new OdbcCommand(CommandText, conn)) 
      { 
       cmd.Parameters.AddWithValue("@ID", TextBox3.Text); 
       cmd.Parameters.AddWithValue("@Supplier", TextBox4.Text); 
       cmd.Parameters.AddWithValue("@Company", TextBox1.Text); 
       cmd.Parameters.AddWithValue("@Address", TextBox11.Text); 
       cmd.Parameters.AddWithValue("@State", TextBox2.Text); 
       cmd.Parameters.AddWithValue("@Country", TextBox5.Text); 
       cmd.Parameters.AddWithValue("@Pincode", TextBox10.Text); 
       cmd.Parameters.AddWithValue("@PhoneNo", TextBox6.Text); 
       cmd.Parameters.AddWithValue("@MobileNo", TextBox7.Text); 
       cmd.Parameters.AddWithValue("@Email", TextBox8.Text); 
       cmd.Parameters.AddWithValue("@Fax", TextBox9.Text); 
       cmd.Parameters.AddWithValue("@RawMaterials", TextBox12.Text); 
       cmd.Parameters.AddWithValue("@Note", TextBox13.Text); 
       cmd.ExecuteNonQuery(); 
      } 
     } 
    } 
+2

你確定你有相關的命名空間嗎? (也請提供更多詳情,歡迎致SO)。 – 2013-03-24 08:53:17

+0

你有相關的命名空間 – anita 2013-03-24 08:56:40

+0

哪一行你會得到錯誤? – 2013-03-24 08:57:29

回答

6

命名爲NOTE領域擁有reserved keyword的JET 4.0相同的名稱。
用方括號

string CommandText = "INSERT INTO SupplierDetails (ID, Supplier, Company, Address, " + 
        "State, Country, Pincode, PhoneNo, MobileNo, Email, Fax, " + 
        "RawMaterials, [Note]) VALUES (@ID, @Supplier, @Company, @Address, " + 
        "@State, @Country, @Pincode, @PhoneNo, @MobileNo, @Email, " + 
        "@Fax, @RawMaterials, @Note)"; 

編輯我看你使用的是OdbcConnection,這將需要您的參數佔位符將使用問號,不帶@前綴字符串提供封裝它。所以,你的CommandText應該是:

string CommandText = "INSERT INTO SupplierDetails (Supplier, Company, Address, " + 
        "State, Country, Pincode, PhoneNo, MobileNo, Email, Fax, " + 
        "RawMaterials, [Note]) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)"; 

注意我怎麼也刪除ID字段和它的參數佔位符,因爲你說這是一個自動增加字段,因此你不能將針對您自身的價值。 另外請記住,在這種情況下,參數可以通過它們在Parameter集合中的位置來識別。因此,按照commandText預期的正確順序添加它們非常重要。

+0

在添加方括號周圍後注意它顯示:錯誤[07002] [Microsoft] [ODBC Microsoft Access驅動程序]太少參數。預計13. – anita 2013-03-24 09:14:45

+0

退出自動增加字段,它不是由你來計算。 – Steve 2013-03-24 09:23:46

+0

即使刪除此行後cmd.Parameters.AddWithValue(「@ ID」,TextBox3.Text);它顯示相同的錯誤,即ERROR [07002] [Microsoft] [ODBC Microsoft Access Driver]參數太少。預期13. – anita 2013-03-24 09:31:29