如何解决"Syntax error in INSERT INTO statement"

How to solve "Syntax error in INSERT INTO statement"

连接有效fine.I我只是在这部分遇到了问题。我对RECORDtable的设计视图如下:

名称类型大小

     RecordID                Long Integer                             4
     BatchID                 Long Integer                             4

     ProcessID               Long Integer                             4
     EmployeeID              Long Integer                             4
     Start                   Date With Time                           8

     End                     Date With Time                           8
     Status                  Yes/No                                   1
     Hour                    Long Integer

这是我的代码:

protected void btnSave_Click(object sender, EventArgs e)
    {

        DateTime a = new DateTime(cldStart.SelectedDate.Year,cldStart.SelectedDate.Month,cldStart.SelectedDate.Day,Convert.ToInt32(ddlStartHour.SelectedValue),Convert.ToInt32(ddlStartMinute.SelectedValue),00);
        DateTime b = new DateTime(cldEnd.SelectedDate.Year, cldEnd.SelectedDate.Month, cldEnd.SelectedDate.Day, Convert.ToInt32(ddlEndHour.SelectedValue), Convert.ToInt32(ddlEndMinute.SelectedValue), 00);
        TimeSpan c = b-a;

        //insert into record table
        using (OleDbConnection con = new OleDbConnection(conString))
        {
            try
            {
                OleDbCommand cmd = new OleDbCommand();
                cmd.CommandType = CommandType.Text;
                cmd.CommandText = "INSERT INTO RECORD (BatchID,ProcessID,EmployeeID,Start,End,Status,Hour) VALUES (@batchid,@processid,@employeeid,@start,@end,@status,@hours)";
                cmd.Parameters.AddWithValue("@batchid", Convert.ToInt32(ddlBatchNo.SelectedValue));
                cmd.Parameters.AddWithValue("@processid", Convert.ToInt32(ddlSubCategory.SelectedValue));
                cmd.Parameters.AddWithValue("@employeeid", Convert.ToInt32(ddlEmployeeId.SelectedValue));
                   cmd.Parameters.AddWithValue("@start",a.ToString() );
                   cmd.Parameters.AddWithValue("@end", b.ToString());
                   cmd.Parameters.AddWithValue("@hours", c.ToString());
                   cmd.Parameters.AddWithValue("@status",chboxStatus.Checked);
                cmd.Connection = con;
                con.Open();
                cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                txtRemark.Text = "wrong";
            }
        }

    }

我正在尝试插入记录 table 但它显示

"syntax error in InSERT into command".

不知道怎么回事。

您table名字与记录关键字相同

尝试将其括在方括号中

protected void btnSave_Click(object sender, EventArgs e) {

    DateTime a = new DateTime(cldStart.SelectedDate.Year,cldStart.SelectedDate.Month,cldStart.SelectedDate.Day,Convert.ToInt32(ddlStartHour.SelectedValue),Convert.ToInt32(ddlStartMinute.SelectedValue),00);
    DateTime b = new DateTime(cldEnd.SelectedDate.Year, cldEnd.SelectedDate.Month, cldEnd.SelectedDate.Day, Convert.ToInt32(ddlEndHour.SelectedValue), Convert.ToInt32(ddlEndMinute.SelectedValue), 00);
    TimeSpan c = b-a;

    //insert into record table
    using (OleDbConnection con = new OleDbConnection(conString))
    {
        try
        {
            OleDbCommand cmd = new OleDbCommand();
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = "INSERT INTO [RECORD] (BatchID,ProcessID,EmployeeID,Start,End,Status,Hour) VALUES (@batchid,@processid,@employeeid,@start,@end,@status,@hours)";
            cmd.Parameters.AddWithValue("@batchid", Convert.ToInt32(ddlBatchNo.SelectedValue));
            cmd.Parameters.AddWithValue("@processid", Convert.ToInt32(ddlSubCategory.SelectedValue));
            cmd.Parameters.AddWithValue("@employeeid", Convert.ToInt32(ddlEmployeeId.SelectedValue));
               cmd.Parameters.AddWithValue("@start",a.ToString() );
               cmd.Parameters.AddWithValue("@end", b.ToString());
               cmd.Parameters.AddWithValue("@hours", c.ToString());
               cmd.Parameters.AddWithValue("@status",chboxStatus.Checked);
            cmd.Connection = con;
            con.Open();
            cmd.ExecuteNonQuery();
        }
        catch (Exception ex)
        {
            txtRemark.Text = "wrong";
        }
    }

}

OleDbCommand 没有名称参数的概念,因此您必须按照与查询中相同的顺序定义参数。

   cmd.Parameters.AddWithValue("@hours", c.ToString());
   cmd.Parameters.AddWithValue("@status",chboxStatus.Checked);

所以你应该

   cmd.Parameters.AddWithValue("@status",chboxStatus.Checked);
   cmd.Parameters.AddWithValue("@hours", c.ToString());

但在您的查询中,状态是在营业时间之前。也像其他人提到的那样修正你的保留字。

您的列名是关键字,例如 end,hour,因此您需要将其括在大括号中

cmd.CommandText = "INSERT INTO RECORD (BatchID,ProcessID,EmployeeID,Start,[End],Status,[Hour]) VALUES (@batchid,@processid,@employeeid,@start,@end,@status,@hours)";

Start,End,Status,Hour 字段名是关键字。将它们更改为 [Start],[End],[Status],[Hour] 或更改数据库中的字段名称