参数化SQL查询不返回任何结果,String格式化查询返回正确的结果

时间:2014-03-11 20:20:43

标签: c# sql .net tsql

我有一个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);
            }
        }
    }
}

即使我在SSMS中运行的返回大量结果的查询也不会返回任何结果。此外,当我删除参数化并用搜索框中的文本替换@searchstring时,查询功能正常。我不想让应用程序停止注入,但我无法弄清楚我使用参数的方式有什么问题。

1 个答案:

答案 0 :(得分:8)

你的意思是:

CHARINDEX(@searchstring, ordernumber)

CHARINDEX('@searchstring', ordernumber)

(同样customername

@searchstring是参数; '@searchstring'是一个文字字符串,其中包含以@开头并以g结尾的13个字符。