-4

変数から「where」を使用してフィールドを表示するSQLクエリがあります。関数から渡された変数があります

値が " !\\( "の文字列empCode

これが私のコードです:

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;
}

私のC#では、結果は0 - 0になり、サーバーを直接SQLしようとすると、2 - 0の結果が表示されます

文字列!\\(は!\(として扱われています

文字列!\\(を where 句に使用するにはどうすればよいですか?

編集:

追加するパラメーターを使用してみました:

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

それでもうまくいかない

4

1 に答える 1

0

C# 文字列のバックスラッシュをエスケープするには、二重のバックスラッシュを使用するか、文字列全体を @ でプレフィックスして、文字列を文字通りに処理し、すべての文字をエスケープします。

いえ

@"foo!\(bar"

文字列を生成します

foo!\(bar 

編集:これを行うことができるのは、文字列を変数に割り当てる場合のみです。変数の前に @ を付けることはできません。

それが役立つことを願っています

于 2016-06-01T06:51:25.603 に答える