如何解决“INSERT INTO 语句中的语法错误”
Posted
技术标签:
【中文标题】如何解决“INSERT INTO 语句中的语法错误”【英文标题】:How to solve "Syntax error in INSERT INTO statement" 【发布时间】:2016-12-09 10:13:32 【问题描述】:连接工作正常。我只是在这部分遇到问题。我对 RECORD 表的设计视图如下:
名称类型大小
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";
我正在尝试插入记录表,但它显示了我
“InSERT into 命令中的语法错误”。
不知道怎么回事。
【问题讨论】:
【参考方案1】: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());
但在您的查询中,状态是在几个小时之前。也像其他人提到的那样修复您的保留字。
【讨论】:
【参考方案2】:您的列名是 end,hour
之类的关键字,因此您需要将其括在大括号中
cmd.CommandText = "INSERT INTO RECORD (BatchID,ProcessID,EmployeeID,Start,[End],Status,[Hour]) VALUES (@batchid,@processid,@employeeid,@start,@end,@status,@hours)";
【讨论】:
非常感谢!!!我犯了一个使用列名作为关键字的愚蠢错误!!现在它完全可以正常工作了【参考方案3】:Start,End,Status,Hour
字段名称是关键字。将它们更改为 [Start],[End],[Status],[Hour]
或更改数据库中的字段名称
【讨论】:
【参考方案4】:你的表名与记录关键字相同
试着用括号括起来
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";
【讨论】:
以上是关于如何解决“INSERT INTO 语句中的语法错误”的主要内容,如果未能解决你的问题,请参考以下文章
“INSERT INTO 语句中的语法错误”错误 - 错误是啥?
使用 DateTime 时 INSERT INTO 语句中的语法错误
asp.net 中的 INSERT INTO 语句中的语法错误