2014-06-15 3 views
-2

나는 테이블에 데이터를 업데이트에 관한 질문이 여기에 코드입니다 :..근처의 구문이 잘못되었습니다 '('

Dim cmdUp As New SqlCommand("UPDATE TblQuestion SET (QuestionTxt =" + question.Text + ") where [email protected]", conn) 

conn.Open() 
cmdUp.Parameters.AddWithValue("@id", result) 

cmdUp.ExecuteNonQuery() 
conn.Close() 

오류, 근처의 구문이 잘못되었습니다 '('그래서 라인 cmdUp.ExecuteNonQuery()에 나타납니다 , 어떻게 .

답변

1

귀하의 문제는 단일 따옴표로 둘러싸없이 문자열 값을 전달하기 위해 임시로 인해 발생합니다. question.Text을 작은 따옴표로 묶으면 문제가 해결 될 수 있습니다. 그러나 이것은 SQL 명령으로 사용되는 문자열 텍스트를 처리하는 올바른 방법이 아닙니다.

이런 종류의 시나리오에는 한 가지 방법 만 있습니다. 매개 변수가있는 쿼리 사용 (그런데를, 쿼리의 절반은 이미 매개 변수, 그래서 왜 안 질문 텍스트?) 다른 대답 설명하지만, 구문 분석 오류도 방지로

Dim cmdUp As New SqlCommand("UPDATE TblQuestion " & _ 
          "SET QuestionTxt [email protected] " & _ 
          "where [email protected]", conn) 

conn.Open() 
cmdUp.Parameters.AddWithValue("@id", result) 
cmdUp.Parameters.AddWithValue("@quest", question.Text) 
cmdUp.ExecuteNonQuery() 
conn.Close() 

매개 변수화 된 쿼리는 SQL 주입을 피하십시오. 사용자가 작은 따옴표가 포함 된 질문을 입력하면 어떻게됩니까? 다른 구문 오류가 발생합니다.

+1

VB에서 @ ""사용할 수 있습니까? –

+0

@ Ciarán 죄송합니다. 당신은 지금 rigth, 고정되어 있습니다. – Steve

3

이 당신의 오류를 수정합니까?이 오류를 해결하기 위해

Dim cmdUp As New SqlCommand("UPDATE TblQuestion SET QuestionTxt ='" + 
          question.Text + "' where [email protected]", conn) 

을 원하지만 당신은 훨씬 더 큰 문제가있다. 이 코드는 SQL Injection 공격을 허용합니다.

X"; DROP TABLE TblQuestion;

HT : http://xkcd.com

+0

어떻게 해결할 수 있습니까? 어떤 생각? – luly

+0

SQL 인젝션에 대한 Google 검색에서 Microsoft의 우수 기사를 제공합니다. http://technet.microsoft.com/en-us/library/ms161953(v=sql.105).aspx – Hogan

+0

바로 지금 코드를 변경하면 오류가 발생합니다. cmdUp.ExecuteNonQuery() 줄에 잘못된 열 이름이 나타납니다. – luly

관련 문제