2013-12-09 90 views
0

正在编写一个c#代码,其中试图更新表的10列中的4个。这是在我送参数的查询我的功能类型:更新查询问题SQL

public int checkout_visitor(int check_inn, int checkout, String time_out, String date_out, String cnic) 

现在发生的事情是,我在节目中的说法提供价值的地方调用这个函数:

checkout_visitor(chk_in,chk_out,t_out,dt_out,idcardnum); 

查询正在使用更新我的列是由:

String query2 = " UPDATE visit_detail SET[check_in] = " + check_inn + "[check_out] = " + checkout + "[time_out] = " + time_out + "[date_out] =" + date_out + "where visit_detail.v_id = "+ v_idd; 

给我在chkout附近的错误语法不正确。我在哪里错了?语法是否正确?我该如何纠正它?

代码:

public int checkout_visitor(int check_inn, int checkout, String time_out, String date_out, String cnic) 
    { 
     try 
     { 
      connection.Open(); 
      String query = "select v_id from visitor where visitor.cnic=" + cnic; 
      command = connection.CreateCommand(); 
      command.CommandText = query; 
      visitor_id = command.ExecuteScalar().ToString(); 
      int v_idd = Int32.Parse(visitor_id); 
      String query2 = " UPDATE visit_detail SET[check_in] = " + check_inn + "[check_out] = " + checkout + "[time_out] = " + time_out + "[date_out] =" + date_out + "where visit_detail.v_id = " + v_idd; 
      //String query2 = "UPDATE visit_detail SET [check_in] = " + check_inn + ",[check_out] = " + checkout + ",[time_out] = " + time_out + ",[date_out] =" + date_out + " where visit_detail.v_id = " + v_idd; 
      command = connection.CreateCommand(); 
      command.CommandText = query2; 
      int result = command.ExecuteNonQuery(); 
      connection.Close(); 
      return result; 
     } 
     catch (Exception e) 
     { 
      return -1; 
     } 

    } 
+0

您忘记了SET和check_in之间的空间SET [check_in] => SET [check_in] – adt

+0

请考虑使用参数,而不是盲目连接字符串值。这些用户可进入吗?我会输入值'1234'); DROP TABLE visit_detail;''为我的身份证号码:http://xkcd.com/327 – Bridge

回答

0

问题:

1.you不正确分隔条件使用逗号,参数。
2.您没有给出SETcheck_in参数之间的空白。

试试这个:

String query2 = "UPDATE visit_detail SET [check_in] = " + check_inn + ",[check_out] = " + checkout + ",[time_out] = '" + time_out + "',[date_out] ='" + date_out + "' where visit_detail.v_id = "+ v_idd; 
+0

{”附近的语法错误:'。“} – user3081555

+0

@ user3081555:您可以发布您的代码吗? –

+0

在这里看到更新的问题 – user3081555

0

你看到生成的查询?在我看来,你错过了一些逗号,但是你应该打印(并发布)生成的查询以更好地理解问题。

+0

“UPDATE visit_detail SET [check_in] = 0 [check_out] = 1 [time_out] = 04:43 PM [date_out] = 12 -9-2013其中visit_detail.v_id = 2“ – user3081555

0

您在列名之间缺少','。 它像更新桌COL1 = 3,COL2 = '测试'

0

的问题是,query2字符串将沿着线的东西:

UPDATE visit_detail SET[check_in] = " 1[check_out] = 2[time_out] = some time[date_out] =some datewhere visit_detail.v_id = 5 

那么你已经可以看到,有datewhere即incorect,也有不'字符串参数周围的字符,参数之间没有逗号。

快速解决,这将是:

String query2 = String.Format("UPDATE visit_detail SET [check_in]={0}, [check_out]={1}, [time_out]='{2}', [date_out]='{3}' where visit_detail.v_id={4};", check_inn, checkout, time_out, date_out, v_idd); 

但这仍然是无效的。如果time_out包含'个字符,则会再次收到错误消息。

你应该真正使用是这样的: SqlCommand.Parameters 这是通过paramters到命令的以适当的方式,所有的问题将采取的为你服务。