2016-09-16 1 views
0

내 데이터베이스에 데이터가 있습니다. 'A Plus 18" Stand Fan' 작은 따옴표가 없습니다. 데이터를 그대로 저장하기 위해 nvarchar를 사용했지만 데이터베이스에서 검색하려고하면 데이터가 'A Plus 18\" Stand Fan'을 반환합니다. WebUtility.HtmlDecodeHtmlUtility.Html.DecodeWebUtility.UrlDecode을 사용해 보았습니다. 누군가 나를 도울 수 있습니까? 감사!데이터베이스에서 C#으로 특수 문자 검색

여기 내 코드는 어디에 비교를 위해 데이터베이스에서 데이터를 읽습니다. 은 "모델"은 내가

for (int y = 0; y < dt.Rows.Count; y++) 
     { 
      model = dt.Rows[y]["ItemModel"].ToString(); 
      string companys = ""; 

      companys = dt.Rows[y]["Company"].ToString(); 



      //getAMS(model, quan); 
      Utility a = new Utility(); 
      string com = a.PO(); 
      SqlConnection con = new SqlConnection(com); 
      SqlCommand read = con.CreateCommand(); 
      SqlDataReader reader = null; 
      string stat = "Delivered"; 

      string mod = "SELECT SUM(Quantity) as Quantity from vConsumables_Balance where Model ='" + model + "' AND Company = '" + companys + "' AND Status = 'Delivered'"; 

      try 
      { 
       con.Open(); 
       read.CommandText = mod; 
       reader = read.ExecuteReader(); 
      } 
      catch (System.Exception) 
      { 
       Console.WriteLine("Error"); 
      } 

      while (reader.Read()) 
      { 

        quan = reader.GetDecimal(0).ToString(); 



      } 
+1

이 문자열을 얻은 방법에 대해 좀 더 자세히 설명해야합니다. 코드 조각이 도움이 될 것입니다. 일반적으로 C# 문자열의 특수 문자는 이스케이프 처리됩니다 (\가 앞에 붙습니다). 따옴표는 특수 문자입니다. 따라서 앞에 백 슬래시가 있습니다. –

+1

문자열을 비교해야합니까? 문자열을 표시 할 때 사라져야하기 때문에 –

+1

C# 코드와 뷰/태그의 일부를 공유하십시오. –

답변

1

코드 라인 string mod = "SELECT SUM(Quantity) as Quantity from vConsumables_Balance where Model ='" + model + "' AND Company = '" + companys + "' AND Status = 'Delivered'";을 수정해야 하나 수동으로 문자열을 연결하여 SQL 쿼리를 작성하는 것을 알 수있다. 데이타베이스에 데이타를 삽입 할 때 같은 것을했다고 가정하고 일부 문자를 이스케이프하기 위해 자신의 도구를 사용했습니다.

이것은 나쁜 생각입니다. 모든 쿼리를 매개 변수가있는 쿼리로 변경해야합니다. 이 문제는 발생할 수있는 다른 문제에 도움이 될 것입니다 : 숫자와 날짜 형식을 지정하고 SQL 주입 공격에 대한 보호 기능을 제공합니다.

Status 열에 대해서는 문자열 대신 열거 형 값을 나타내는 정수 값을 사용하는 것이 좋습니다.