LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

C# 中是否支持 Like 和 ln 条件的参数化查询 ?

admin
2024年11月23日 13:35 本文热度 406

咨询区

  • Tom Ritter

.NET 中的参数化查询我一直都像下面这样写。


SqlCommand comm = new SqlCommand(@"
   SELECT * 
   FROM   Products 
   WHERE  Category_ID = @categoryid
"

   conn);
comm.Parameters.Add("@categoryid", SqlDbType.Int);
comm.Parameters["@categoryid"].Value = CategoryID;

但我现在遇到了一个困难,参考如下代码:


SqlCommand comm = new SqlCommand(@"
   SELECT * 
   FROM   Products 
   WHERE  Category_ID IN (@categoryids) 
      OR  name LIKE '%@name%'
"

   conn);
comm.Parameters.Add("@categoryids", SqlDbType.Int);
comm.Parameters["@categoryids"].Value = CategoryIDs;
comm.Parameters.Add("@name", SqlDbType.NVarChar);
comm.Parameters["@name"].Value = Name;

where条件中:

  1. CategoryIDs 是一个以逗号隔开的字符串 123,456,789 。

  2. Name 是一个字符串,也有可能是包含了特殊字符。

目前的参数化无法查询,请问正确的语法如何写?

回答区

  • Paul Turner

这里我逐一回答下你的问题。

1. CategoryIds

这里我假定 CategoryIds 是一个 int 类型的数组,正确的做法是将 int 数组中的所有元素打散,然后逐一 参数化,比如可以在循环中构建一个 @p0 - @pN-1 的有序参数,这里的 N 就是 CategoryIds 数组索引,然后逐一添加到 Command.Parameters 中。

2. Name

对 Name 的模糊匹配,应该放在 Parameters 参数上,而不是 SQL 中。

参考如下代码:


string Name = "someone";
int[] categoryIDs = new int[] { 2381138161516161617,
                                16181619162019511952,
                                19531954195519722022 };

SqlCommand comm = conn.CreateCommand();

string[] parameters = new string[categoryIDs.Length];

for(int i=0;i<categoryIDs.Length;i++)
{
   parameters[i] = "@p"+i;
   comm.Parameters.AddWithValue(parameters[i], categoryIDs[i]);
}
comm.Parameters.AddWithValue("@name",$"%{Name}%");
comm.CommandText = "SELECT * FROM Products WHERE Category_ID IN (";
comm.CommandText += string.Join(",", parameters) + ")";
comm.CommandText += " OR name LIKE @name";

点评区

这是初学者在用 sql 参数化查询时经常遇到的问题,有必要摘出来和大家分享下,如果有条件,建议看看 Dapper 的源码,别人是如何处理此类场景的。


该文章在 2024/11/25 11:07:50 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved