我有一个SQL表,我试图搜索与用户提供的动态搜索字符串匹配的订单,然后用结果填充OrderDataTable.这是C#代码:
CmdString = "SELECT * FROM SQL_TABLE WHERE (CHARINDEX('@searchstring', ordernumber) > 0 OR CHARINDEX('@searchstring', customername) > 0)"
using (SqlConnection conn = new SqlConnection(ConnectionString))
{
using (SqlCommand comm = new SqlCommand())
{
comm.Connection = conn;
comm.Parameters.AddWithValue("@searchstring", OrderDisplayViewModel.SearchString);
comm.CommandText = CmdString;
using (SqlDataAdapter sda = new SqlDataAdapter(comm))
{
using (DataTable tempdatatable = new DataTable())
{
sda.Fill(tempdatatable);
OrderDataTable.Merge(tempdatatable);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
即使对于我在SSMS中运行的返回大量结果的查询,也不会返回任何结果.此外,当我删除参数化并用搜索框中的文本替换@searchstring时,查询功能正常.我不想让应用程序开放注入,但我无法弄清楚我使用参数的方式有什么问题.
你的意思是:
CHARINDEX(@searchstring, ordernumber)
Run Code Online (Sandbox Code Playgroud)
不
CHARINDEX('@searchstring', ordernumber)
Run Code Online (Sandbox Code Playgroud)
(同样customername)
@searchstring是参数; '@searchstring'是一个文字字符串,包含从中开始@和结尾的13个字符g.
| 归档时间: |
|
| 查看次数: |
156 次 |
| 最近记录: |