c#
  • sql-server
  • parameterized
  • 2014-11-06 2 views -3 likes 
    -3

    여기 내 코드입니다 ... 작은 따옴표가없는 입력 데이터에 대해서는 정상적으로 작동하지만 작은 따옴표를 입력하고 게시하려고하면 충돌이 발생합니다. 나는 많은 코드 샘플을 시도했으며 이것이 효과가있다. 어떤 도움을 주시면 감사하겠습니다.작은 따옴표를 처리하기 위해 C# 매개 변수가있는 쿼리를 실행해도 작은 따옴표에 예외 오류가 발생합니다. 이 작품을 어떻게 만들 수 있습니까?

    string SQLcommand = "UPDATE FirearmTracking SET LastName='" 
    + @custData[2] + // lastName 
    "', CitationNum='" + custData[1] + // citation 
    "', FirstName='" + custData[3] + // firstname 
    "', MiddleInitial='" + custData[4] + // mi 
    "' WHERE EventNum = '" + @custData[0] + // eventNum 
          "' "; 
         // Create a new table 
         DataTable FirearmTracking = new DataTable(); 
    
         // Grab the Connection String 
         SqlConnection conn = Connections.GetDataFromDB(); 
    
         // Create a SqlCommand object 
         SqlCommand cmd = new SqlCommand(); 
         cmd.Connection = conn; 
         cmd.CommandType = CommandType.Text; 
         cmd.CommandText = SQLcommand; 
    
         cmd.Parameters.AddWithValue("@LastName", custData[2]); 
    
         try 
         { 
          conn.Open(); 
          cmd.ExecuteNonQuery(); 
         } 
         catch (Exception) 
         { 
          throw new Exception("Data Layer - Customer Error..."); 
         } 
         finally 
         { 
          conn.Close(); 
         } 
         return null; 
    
    +3

    사용 매개 변수 만. 문자열 연결이 아닙니다. 기간. –

    +0

    매개 변수를 사용하거나 저장 프로 시저로 변환하십시오. 현재 상태가 매우 복잡하고 SQL 삽입이 자주 발생합니다. – MethodMan

    +1

    또한 "C# 매개 변수가있는 쿼리"가 아닙니다. "SQL Server 매개 변수가있는 쿼리"일 수도 있지만 쿼리 자체는 C#과 아무 관련이 없습니다. 당신이하고있는 방식은 _any_ 언어에서 나쁜 생각입니다. –

    답변

    0

    작은 따옴표를 두 번 사용하여 이스케이프해야하므로이 문제가 발생합니다.

    이 스레드를 참조하십시오 : How do I escape a single quote in SQL Server?

    을 어쨌든, 그것은 사용자 입력 사용 매개 변수 또는 저장 프로 시저에서 직접 쿼리를 간부 인하는 나쁜 습관이다.

    +0

    빠른 응답을 보내 주셔서 감사합니다. 좋은 점은 –

    3

    매개 변수를 설정하고 있지만 쿼리에서 사용하지 않습니다. 대신 값을 합치의 쿼리

    넣어 매개 변수 이름 :

    string SQLcommand = 
        "UPDATE FirearmTracking SET " + 
        "LastName = @LastName, " + 
        "CitationNum = @CitationNum, " + 
        "FirstName = @FirstName, " + 
        "MiddleInitial = @MiddleInitial " + 
        "WHERE EventNum = @EventNum"; 
    

    지금 그들을 위해 매개 변수를 추가 :

    cmd.Parameters.AddWithValue("@LastName", custData[2]); 
    cmd.Parameters.AddWithValue("@CitationNum", custData[1]); 
    cmd.Parameters.AddWithValue("@FirstName", custData[3]); 
    cmd.Parameters.AddWithValue("@MiddleInitial", custData[4]); 
    cmd.Parameters.AddWithValue("@EventNum", custData[0]); 
    
    +0

    입니다. 정말 고마워. 내가 본 다른 모든 예제는 Update 명령의 값 필드 앞에 @를 배치했습니다. 오늘 나는 약 6 시간을 보냈고 나는 미쳐 가고 있다고 생각했다. 다시 너에게 감사한다. –

     관련 문제

    • 관련 문제 없음^_^