2012-11-07 2 views
2

C#을 사용하여 DB에서 값을 읽으려고합니다. 쿼리 문자열에 여러 개의 작은 따옴표 (예 : Esca'pes)가 포함되어 있습니다 (쿼리 문자열은 텍스트 파일에서 읽음)모든 작은 따옴표를 문자열의 두 개의 작은 따옴표로 바꾸십시오.

그래서 SQL을 작성하기 전에 모든 작은 따옴표를 두 개의 작은 따옴표로 바꾸고 싶습니다. 질문. 내 코드는 다음과 같습니다.

if (name.Contains('\'')) 
{ 
    name = name.Replace('\'','\'''); 
} 

해결 방법? 두 개의 문자로 단일 문자를 대체 할 때문에

+5

어떻게 수정합니까? 오류가 있습니까? 또한 SQL 주입을 막는 것이 목표라면 매개 변수가있는 쿼리를 사용하는 것이 더 나을 것이라고 생각합니다. – Mansfield

+1

'name.Replace (" '", "' '")'아마도 당신이 쫓고있는 것입니까? – sybkar

+1

다른 사람들도 언급했듯이, DBMS 세계에서 누군가가 잠재적으로 "매개 변수"에 값을 전달할 수 있기 때문에 DBMS에서 실행하지 못하도록하려는 쿼리를 실행하여 잠재적으로 손상 될 수 있으므로 귀하의 시스템. Google에서 "SQL 인젝션"을 검색하면이 문제가 어떻게 진행되는지에 대한 자세한 정보를 얻을 수 있으며,이 조언을 따르지 않으면 어떻게하면 가장 좋은 Sony 소규모 플레이 스테이션 네트워크 해킹보다 더 뒤로 물러날 수 있습니다. – shaunhusain

답변

17

char 리터럴이 아닌 문자열을 사용하십시오.

name = name.Replace("'", "''"); 

그러나 SQL 문자열을 연결하는 것처럼 들립니다. 이것은 SQL 삽입의 위험 때문에 최신 응용 프로그램 설계에서 거대한 "DO NOT"규칙입니다. SQL 매개 변수를 대신 사용하십시오. 모든 현대 DBMS 플랫폼은 SQL Server 및 MySQL이 포함 된 ADO.NET을 포함하여 Access를 지원합니다.

관련이없는 노트에
2

, 당신은 교체의 캐릭터 과부하를 사용할 필요가

if (name.Contains('\'')) 
{ 
    name = name.Replace("'","''"); 
} 

(참고 : 작은 따옴표는 문자 표기법처럼 문자열에서 탈출이 필요하지 않습니다 .)

+0

왜 문자열에 작은 따옴표가 포함되어 있는지 확인해야하는 이유는 바꾸기가 문자열을 바꿀 때만 해당 패턴이 포함되어있는 경우입니다. – Kapil

+0

@Kapil은 원래 사용자의 질문을 미러링하고 작동하지 않는 부분 만 교체했습니다. –

2

name = name.Replace("'","''");

, 당신은 SQL에서 사용하기 위해 문자열을 연결하는거야? 대신 매개 변수를 사용해보십시오. 매개 변수가 의미하는 바입니다. 아마 당신이 필요로하는 것보다 더 힘들게 만들고있을 것입니다.

관련 문제