Предотвратить escape-строку C#

У меня есть 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;

Все еще не работает

1 ответ

Чтобы избежать обратной косой черты в строке C#, вы можете использовать либо двойную обратную косую черту, либо префикс всей строки с @, который будет обрабатывать строку буквально и экранировать все символы.

Т.е.

@"foo!\(bar"

будет производить строку

foo!\(bar 

Редактировать: Вы можете сделать это только тогда, когда вы присваиваете строку переменной, вы не можете добавить префикс @ к переменной.

надеюсь, это поможет

Другие вопросы по тегам