【发布时间】: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