在oledbconnection中插入语法错误

时间:2014-12-02 11:50:20

标签: c# syntax-error sql-insert oledbcommand

此代码有什么问题?

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 个答案:

答案 0 :(得分:0)

这里有三个问题:

  • 您使用的是四个参数,但只指定了其中的三个参数。 (评论表明你在循环之外指定另一个)
  • 在任何一次迭代中,您最多只填充一个参数 - 您对其他参数的价值是什么?
  • 您正在尝试使用OleDbConnection命名参数。来自OleDbConnection.Parameters文档:

      

    当CommandType设置为Text时,OLE DB .NET提供程序不支持将参数传递给SQL语句或OleDbCommand调用的存储过程的命名参数。在这种情况下,必须使用问号(?)占位符。