2016-06-01 8 views
-4

変数からの "where"を使ってフィールドを表示するsqlクエリがあります。 私は私の変数に値がある機能エスケープ文字列を避けるC#

文字列 empCodeから渡されていここ

は私のコードだ " \\(は!":結果が0になると、私のC#では

public List<int> GetSuccessAndFailedCountForTodayForAgent(string empCode) 
{ 
    var result = new List<int>(); 
    string query = "SELECT (SELECT COUNT(*) FROM BusinessTransactions WHERE STATUS='Failed' AND ENTEREDDATE='" + DateTime.Now.Date.ToShortDateString() + "' AND AgentEmployeeCode='" + empCode + "') AS FAILED_COUNT, (SELECT COUNT(*) FROM BusinessTransactions WHERE STATUS='Completed' AND ENTEREDDATE='" + DateTime.Now.Date.ToShortDateString() + "' AND AgentEmployeeCode='" + empCode + "') AS SUCCESS_COUNT"; 
    using (SqlConnection conn = new SqlConnection(asynchPaymentDBConnectionString)) 
    { 
      conn.Open(); 
      using (SqlCommand s = new SqlCommand(query, conn)) 
      { 
       using (SqlDataReader reader = s.ExecuteReader()) 
       { 
        try 
        { 
         if (reader.HasRows) 
         { 
           while (reader.Read()) 
           { 
            result.Add(reader.GetInt32(0)); 
            result.Add(reader.GetInt32(1)); 
           } 
         } 
        } 
        catch (Exception ex) 
        { 
         //do something 
        } 
       } 
      } 
    } 
    return result; 
} 

- 0 SQL Serverに直接2 - 0の結果を表示しようとするとき

文字列は、(

どのように私は、文字列を使用することができます\!として扱われている!\\(私のwhere句に?

EDIT:

私は追加のパラメータを使用してみました:

s.Parameters.Add("@EmployeeCode", SqlDbType.NVarChar, 16); 
s.Parameters["@EmployeeCode"].Value = empCode; 

はまだあなたが使用することができますいずれかのC#の文字列ダブルバックスラッシュまたはプレフィックスにバックスラッシュをエスケープするに

+4

あなたのクエリをパラメータ化してみてください。 –

+2

あなたのコードは[SQL Injection](http://www.w3schools.com/sql/sql_injection.asp)に脆弱です。 @FelixPamittanのように、[parameters](https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.parameters%28v=vs.110%29.aspx)を使用してビルドする必要がありますちょうど文字列を連結するのではなく、あなたのクエリ。 –

+0

重複してリンクされています。http://stackoverflow.com/questions/5468425/how-do-parameterized-queries-help-against-sql-injection質問SQLインジェクションについて説明し、問題を解決する方法を示します –

答えて

0

を動作しません。文字列全体を@で囲み、文字列をそのまま扱い、すべての文字をエスケープします。

I.e. あなたは変数に文字列を代入しているときにのみ、あなたは、@を持つ変数の接頭辞ことができない、これを行うことができます。

@"foo!\(bar" 

は、文字列

foo!\(bar 

編集を生成します。

希望するもの

+0

変数から来た場合はどうすればいいですか? 文字列id = @empCodeを試してみましたが、代わりにidを使用しましたが – natsu1627

+0

これを使用して文字列を変数に代入する必要がありますが、変数を使用するときに再度行う必要はありません。 – Notts90

+0

あなたは@を引用符の外に置くべきです – Notts90

関連する問題