카테고리 없음

[c#] '가있는 곳에'를 추가하는 프로그램

행복을전해요 2020. 12. 15. 00:28

뭔가 빠졌을 수도 있지만 단순히 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