2013-12-09 3 views
0

에 문제가있는 테이블의 10 열 중 4 개를 업데이트하려고하는 C# 코드를 작성하고 있습니다. 사용하고업데이트 쿼리 SQL

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

쿼리 :

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

지금 무슨 일하는 난 내 프로그램이 인수에 값을 제공하는 곳이 함수를 호출한다는 것이다 : 여기에 쿼리에 대한 인수를 보내고있는 내 함수 타입이다 내 열을 업데이트하는 방법은 다음과 같습니다.

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; - 내 ID 카드 번호 : 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_detail SET [check_in] = 0 [check_out] = 1 [time_out] = 04:43 PM [date_out] = 12 -9-2013where 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 

그래서 당신이 incorect이 datewhere가 있음을 볼 이미 수 있습니다, 또한 더 없다 문자열 매개 변수 주위에는 ' 자이며 매개 변수 사이에는 쉼표가 없습니다. 그것

빠른 수정은 다음과 같습니다

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을 전달하는 적절한 방법이며, 모든 문제가 당신을 위해 처리를 수행 할 :

은 무엇 당신이 정말로 사용해야하는 것은 이것이다.