防止转义字符串c#

时间:2016-06-01 06:40:11

标签: c# sql escapestring

我的sql查询使用变量中的“where”显示字段。 我从函数

传递了我的变量

字符串 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 server时它会显示2 - 0的结果

字符串!\\()被视为!\(

如何使用我的字符串!\\(到我的where子句?

修改

我尝试使用参数添加:

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

仍然无效

1 个答案:

答案 0 :(得分:0)

要在C#字符串中转义反斜杠,您可以使用双反斜杠,也可以在整个字符串前加上@,它将按字面意思处理字符串并转义所有字符。

@"foo!\(bar"

将生成字符串

foo!\(bar 

编辑: 只有在将字符串赋值给变量时才能执行此操作,不能使用@为变量添加前缀。

希望有所帮助