2013-12-09 92 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到命令的以適當的方式,所有的問題將採取的爲你服務。