【问题标题】:prevent escape string c#防止转义字符串 c#
【发布时间】:2016-06-01 06:40:11
【问题描述】:

我有我的 sql 查询,它使用变量中的“where”显示字段。 我的变量是从函数传递的

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

还是不行

【问题讨论】:

  • 尝试参数化您的查询。
  • 您的代码容易受到SQL Injection 的攻击。就像@FelixPamittan 建议的那样,您应该使用parameters 来构建您的查询,而不仅仅是连接字符串。
  • Linked as duplicate stackoverflow.com/questions/5468425/… 问题解释了什么是 SQL 注入并展示了如何修复它(这也将解决您试图破解的问题)
  • 除了参数化代码之外,您还可以在前面的字符串中添加@ 来告诉编译器忽略转义字符。
  • 使用参数似乎不起作用

标签: c# sql escapestring


【解决方案1】:

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

@"foo!\(bar"

将产生字符串

foo!\(bar 

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

希望有帮助

【讨论】:

  • 当它来自变量时,我该怎么做?我尝试了 string id = @empCode 并改用 id 但也不起作用
  • 您需要使用它来将字符串分配给变量,但在使用变量时您不需要再次执行此操作。
  • 另外传入的字符串不是empCode吗?在这种情况下,您需要在分配给 empCode 时将 @ 放在字符串的前面,无论这样做是什么。您不能追溯转义字符。
猜你喜欢
  • 1970-01-01
  • 2011-03-18
  • 1970-01-01
  • 2015-09-14
  • 2010-12-21
  • 2011-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多