2016-09-16 5 views
0

私のデータベースにはデータがあります。'A Plus 18" Stand Fan'一重引用符は使用しないでください。私はデータをそのまま保存するためにnvarcharを使用しましたが、データベースから取得しようとすると、データは'A Plus 18\" Stand Fan'を返しています。 WebUtility.HtmlDecodeHtmlUtility.Html.DecodeでもWebUtility.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'";を修正する必要がある1つ手動で文字列を連結してSQLクエリを作成していることを示しています。データベースにデータを挿入するときに同じことをしたと仮定し、いくつかの文字をエスケープするためにあなた自身のツールを使用しました。

これは悪い考えです。すべてのクエリをパラメータ化されたクエリに変更する必要があります。遭遇する可能性のあるその他の問題については、数字と日付の書式設定やSQLインジェクション攻撃に対する保護機能も備えています。

Statusの列については、文字列の代わりに列挙値を表す整数値を使用することをお勧めします。