在oledbconnection中插入语法错误

问题描述:

此代码中的问题是什么?在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

有三个问题在这里:

  • 您使用的四个参数,但只能指定其中的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