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

 郑郑郑克_583 发布于 2023-01-18 17:01

我有一个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 个回答
  • 你的意思是:

    CHARINDEX(@searchstring, ordernumber)
    

    CHARINDEX('@searchstring', ordernumber)
    

    (同样customername)

    @searchstring是参数; '@searchstring'是一个文字字符串,包含从中开始@和结尾的13个字符g.

    2023-01-18 17:03 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有