2011-09-19 4 views
0

동적으로 생성 된 서버 측 문자열이 있습니다. 오픈 독 ('ProductManual.pdf', 'vbShowDoc')데이터베이스와 아포스트로피 인코딩 오류가 발생했습니다.

오류 메시지 : 예상 ')'

어떻게

strHTML = "<td><a href""google.com"" onclick=""SaveToDatabase('" + arrString(0) + "','" + arrString(1) + "')"" 

arrString의 값은 (1) 자바 스크립트입니다 이 값을 데이터베이스에 저장하고 데이터베이스에서 다시 가져올 때 디코드하려면이 값을 인코딩합니까?

+0

어떻게 DB에 저장하려고합니까? DB에 저장할 때 사용중인 코드를 볼 수 있습니까? DB에 업데이트를 보낼 때 매개 변수화를 사용해야합니다. –

+0

@ 존, 저장 쿼리는 매우 간단한 ExecuteNonQuery입니다. 매개 변수화 란 무엇을 의미합니까? – DotNetRookie

+0

데이터베이스에 저장할 때 이와 같이 쿼리 문을 작성하면 안됩니다. 'query = "Table1 세트를 업데이트하십시오. Column1 ='"& someStringVar & " 'PrimaryKey ='& someStringVar2 &" ' "'대신이 링크 http://www.codinghorror.com/blog에서 보여지는 매개 변수화 된 쿼리를 사용해야합니다. /2005/04/give-me-parameterized-sql-or-give-me-death.html –

답변

2

간단한

당신은 교체해야 '\'

(C#을)

arrString(0)=arrString(0).replace("'",@"\'") 
0

당신이

INSERT dbo.table(foo) VALUES('foo'bar'); 

당신 같은 문자열을 전달하려는 경우 두 배로 올 필요가있다. 아포스트로피 :

INSERT dbo.table(foo) VALUES('foo''bar'); 

그러나 @ 존 Hartsock 절대적으로 옳다 : 당신은 SQL Server에 임시 연결된 문자열을 송신 할 수 없습니다. 매개 변수를 사용하면이 문제를 완전히 피할 수 있습니다. ('오픈 독 (자바 스크립트'ProductManual.pdf ','vbShowDoc ')' '무엇이든') ""

노트 여기 따옴표 문제

2

문제는 당신이 SaveToDatabase입니다입니다. 당신은 따라서 사용, 그게 전부가 아니라 닫는 인용 '은 (오픈 독 이후로 촬영 한 자바 스크립트하지만 닫는 따옴표'에서 오프닝 인용문이 \ ' 당신은 \로 견적을 인코딩해야'참조

: http://forums.asp.net/t/1047952.aspx

편집 : 나는 Mid787 그것에 나를 이길 볼 수 있지만 내가

+0

추가 정보는 만족 스럽지만 여전히 동일한 오류가 발생합니다. msg : 예상되는 ')'줄 : 1 IE scriptDebugger – DotNetRookie

+0

제안을 사용하면 줄 1 부분이 의미가 없습니다.이 줄은 오류를 일으킬 가능성이 있습니다. ProcessElements ('3', 'Product Manual ~ Javascript : OpenDoc (''g '', ''NEW ''); ',' ',' '); – DotNetRookie

1

당신이 사용자 또는 외부 소스로부터 입력을 읽을 때마다 몇 가지 추가 정보를 제공하고 싶어, 당신은 항상 항상 항상 구축하기 전에 그것을 탈출한다 그것으로부터의 SQL 커멘드

이 작업을 수행하는 한 가지 방법은 준비된 문이나 저장 프로 시저를 사용하고 기본 제공 함수 호출을 사용하여 변수를 설정하는 것입니다. 그런 다음 함수가 이스케이프를 처리합니다.

SQL을 직접 작성하거나 손으로 빌드해야하는 경우 SQL을 이스케이프 처리하는 함수를 작성하십시오. 대부분의 SQL 엔진의 경우, 즉,

팻 오하라는 '안녕하세요'

팻 O''Hara 말했다

로했다

를 설정하고,이를 임베디드 따옴표를 찾아 두 번에 충분하다 ''Hello '

일부 SQL 엔진에는 이스케이프가 필요한 다른 문자가 있습니다. Postgres처럼 백 슬래시도 두 번 사용해야합니다.

이 작업을 수행하는 함수를 작성하기는 쉽지만 항상 사용하십시오.

필자는 프로그래머들과 많은 대화를 나누었습니다. 사람들이이 특정 필드에 인용 부호를 입력 할 가능성이 있다고 생각하지 않았기 때문에이 경우에는 신경 쓰지 않는다고 말합니다. 그러나 보통 우리가 대화를하는 이유는 누군가가 한 것이기 때문입니다. 그것을 분석하지 마십시오! 그냥 해! 그것은 안전 벨트를 착용하는 것과 같습니다. 거기에 앉아서이 특별한 여행에서 우연히 생길 확률을 계산할 수 있습니다. 그러나 그 이유는 무엇입니까? 지혜로운 운전자는 운전대에서 길가로 차를 옮기는 것 뿐인데도 불구하고, 항상 안전 벨트를 착용하는 정신없는 자동 조치를 취합니다. 현명한 데이터베이스 프로그래머는 당신이 알지 못하기 때문에 항상 입력 문자열을 이스케이프합니다.