뭔가 빠졌을 수도 있지만 단순히 Replace 메서드를 사용하지 않는 이유는 무엇입니까?
insertStatement = insertStatement.Replace("'","''");
-------------------코드가 무엇을하기를 기대합니까? 기대하십니까?
VALUES ('test', 'test2')
이것으로 바꾸려면?
VALUES (''test'', ''test2'')
확실히 그것은 잘못된 SQL입니다. 확실히 당신은 그것을 원하지 않습니다.
당신은 실제로 문자열을 탈출 할 첫 번째 , 그리고 다음 SQL 쿼리를 구성 :
var escapedString1 = escape("test");
var escapedString2 = escape("test2");
string insertStatement = string.Format(
"INSERT INTO EXCEPTION_LOG (value1, value2) VALUES ({0}, {1});",
escapedString1, escapedString2);
이제 이스케이프 함수를 작성하는 것은 정말 쉽습니다.
public static string escape(string input)
{
return "'" + input.Replace("'", "''") + "'";
}
-------------------이 코드는 매우 먼 길입니다. 모든 '문자에 대해 바꾸기를 실행하고' '로 바꿀 수 있습니다. 아래 코드 :
private static string AddEscapeStrings(string insertStatement)
{
var returnString = returnString.Replace("'","''");
return returnString;
}
-------------------이전 문자를 c [i-1] = '\' '로 덮어 씁니다.
대신 삽입해야합니다.
-------------------먼저 '@'synax를 사용하여 줄을 끊으십시오.
string insertStatement = @"INSERT INTO EXCEPTION_LOG (value1, value2)
VALUES ('test', 'test2');";
둘째, 왜 double로 요청을 무효화해야 '
합니까?
마지막으로 replace를 사용할 수 있습니다.
insertStatement = insertStatement.Replace("'","''");
''
이미 성명서에 없는 경우 .
다음을 사용해야합니다.
private static string AddEscapeStrings(string insertStatement)
{
return insertStatement.Replace("'", "''");
}
-------------------문자열에 직접 삽입 할 수 있습니다.
string result = "";
foreach(char c in insertStatement)
{
if(c == '\'')
result += "'";
result += c;
}
return result;
편집 : 나는 당신이 SQL 쿼리를 수행하는 부분을 놓쳤습니다-매개 변수를 사용해야합니다. 읽어야 할 링크는 다음과 같습니다. http://www.csharp-station.com/Tutorials/AdoDotNet/Lesson06.aspx
출처
https://stackoverflow.com/questions/7415124