2

我遇到了一个例外:

',' 附近的语法不正确。

在以下查询中:请帮助。

我已经尝试了很多方法,但不是它不起作用。即使我尝试插入单个值,我仍然会收到此异常。

cmd = new SqlCommand("insert into purchaseOrder_master(sup_id,po_date,required_date,tot_amt,uid,potime) values("+supid.Text +",'"+podate.Value.Date+"','"+reqdate.Value.Date+"',"+pocost.Text +","+uid.Text +",'"+potime.Value.TimeOfDay  +"')", con);
4

7 回答 7

5

我们必须多久重复一次您应该使用参数化查询?!

using (SqlCommand cmd = new SqlCommand("insert into table (column) values (@param)", conn))
{
  cmd.Parameters.AddWithValue("@param", value);
  cmd.ExecuteNonQuery();
}

您的代码的问题是:

  1. 对 SQL 注入开放
  2. DateTime 值将无法正确处理(可能是现在的问题)
  3. 必须正确处理字符串(引号)
于 2013-08-29T06:39:07.183 回答
2
cmd = new SqlCommand("insert into PurchaseOrder_master(sup_id) values(@val)", con);    
cmd.parameters.AddWithValue("@val", supid.Text );

请检查日期的数据类型。看来您只是为此传递了字符串。如果它的日期时间,那么您需要将字符串解析为日期时间。对于该转换用途,

 DateTime.Parse("stringValue");

如果您想在没有命令参数的情况下保存它,请转换您的日期值并如上所述检查。

于 2013-08-29T06:43:00.157 回答
0

改变

"+uid.Text +"

'"+uid.Text +"'

"+supid.Text +"

'"+supid.Text +"'

以便

values("+supid.Text +",'"+podate.Value.Date+"','"+reqdate.Value.Date+"',"+pocost.Text +","+uid.Text +",'"+potime.Value.TimeOfDay  +"')

values('"+supid.Text +"','"+podate.Value.Date+"','"+reqdate.Value.Date+"',"+pocost.Text +",'"+uid.Text +"','"+potime.Value.TimeOfDay  +"')
于 2013-08-29T06:39:46.450 回答
0

我相信问题是您将字符串放入没有“'”符号的插入语句中

尝试:

cmd = new SqlCommand("insert into purchaseOrder_master(sup_id,po_date,required_date,tot_amt,uid,potime) values("+supid.Text +",'"+podate.Value.Date+"','"+reqdate.Value.Date+"','"+pocost.Text +"','"+uid.Text +"','"+potime.Value.TimeOfDay  +"')", con);

如您在此处阅读的,在执行插入语句时,每个字符串都需要用“'”包围

于 2013-08-29T06:39:59.790 回答
0

查看您的实际SQL 字符串。

可能您的值之一是空字符串。

那,以及托尔斯滕所说的话。使用参数化查询。

于 2013-08-29T06:38:49.487 回答
0

尝试调试您的代码并检查查询的确切构成。

我也认为可能的原因是

insert into purchaseOrder_master(sup_id,po_date,required_date,tot_amt,**uid**,potime

uid 是一个关键字。用 [uid] 替换它并检查

于 2013-08-29T06:44:42.127 回答
-1

您的变量中有一个 string.empty 。突然你生成以下命令:插入 purchaseOrder_master(sup_id,po_date,required_date,tot_amt,uid,potime) values('value1','value2',,'value3'...

你可以使用 string.format 来格式化你的命令

于 2013-08-29T06:43:48.517 回答