Предотвратить 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
Редактировать: Вы можете сделать это только тогда, когда вы присваиваете строку переменной, вы не можете добавить префикс @ к переменной.
надеюсь, это поможет