2016-06-01 77 views
-4

我有我的sql查询显示使用变量“where”的字段。 我有我的变量从功能防止转义字符串c#

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

尝试参数化您的查询。 –

+2

您的代码容易受到[SQL注入](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

为了逃避在C#中的字符串反斜杠,你可以使用一个双反斜线或前缀带@的整个字符串将逐字处理字符串并转义所有字符。

I.e.

@"foo!\(bar" 

会产生串

foo!\(bar 

编辑: 你只能做到这一点,当你分配字符串变量,你不能前缀@的变量。

希望有帮助

+0

当它来自变量时,我该怎么做? 我试过字符串id = @empCode并使用id代替,但是也不起作用 – natsu1627

+0

您需要使用它将字符串分配给变量,但在使用变量时不需要再次使用它。 – Notts90

+0

你应该把你@引号外 – Notts90