2014-12-02 94 views
-1

此代碼中的問題是什麼?在oledbconnection中插入語法錯誤

for (int i = 1; i <= kalanum; i++) 
{ 
    foreach (Control ctr in panel1.Controls) 
    {      
     if (ctr is TextBox && ctr.Name == i.ToString()) 
     { 
      int kalaid = int.Parse(((TextBox)ctr).Text); 
      oleDbCommand1.Parameters.AddWithValue("@k", kalaid); 
     } 
     else if (ctr is TextBox && ctr.Name == "tbxfee_" + (i.ToString())) 
     { 
      int fee = int.Parse(((TextBox)ctr).Text); 
      oleDbCommand1.Parameters.AddWithValue("@fe", fee); 
     } 
     else if (ctr is TextBox && ctr.Name == "tbxnumber_" + (i.ToString())) 
     { 
      int number = int.Parse(((TextBox)ctr).Text); 
      oleDbCommand1.Parameters.AddWithValue("@n", number); 
     }    
    } 

    oleDbCommand1.CommandText = "INSERT INTO fackala(factornum,kalaid,fee,number) values(@f,@k,@fe,@n)"; 
    oleDbConnection1.Open(); 
    oleDbCommand1.ExecuteNonQuery(); 
    oleDbConnection1.Close();    
} 

我的訪問文件中的所有列都是數字。當我在表單中插入所有日期併發送表單時,它顯示:

INSERT INTO語句中的語法錯誤。

+1

哪裏是@f'? – 2014-12-02 11:51:52

+0

哪裏是** @ f **參數? – 2014-12-02 11:53:12

+0

它是前循環! – 2014-12-02 11:54:55

回答

0

有三個問題在這裏:

  • 您使用的四個參數,但只能指定其中的3。 (註釋建議你指定循環外的另一個)
  • 在任何一個迭代中,最多隻能填充一個的參數 - 你期望別人的值是什麼?
  • 您正在嘗試使用帶有OleDbConnection的命名參數。從OleDbConnection.Parameters文檔:

    的OLE DB .NET提供程序不支持命名參數,將參數傳遞到SQL語句或一個OleDbCommand調用的時候CommandType設置爲文本中的存儲過程。在這種情況下,必須使用問號(?)佔位符。

+0

現在我該怎麼辦? id不理解,因爲我是新的! – 2014-12-02 11:56:44

+0

@RezaZamani:根據文檔,您應該使用位置參數。按照該鏈接瞭解更多詳情。 – 2014-12-02 11:57:16

+0

@ RezaZamani:我還沒有注意到更多的問題 - 我已經更新了我的答案。我懷疑你實際上可能只想*兩個*參數... – 2014-12-02 11:59:16