IN 语句中的 Datacontext ExecuteCommand 参数
Posted
技术标签:
【中文标题】IN 语句中的 Datacontext ExecuteCommand 参数【英文标题】:Datacontext ExecuteCommand parameters in IN statement 【发布时间】:2010-10-21 09:03:07 【问题描述】:使用IN
从 C# LinQ 到 sql 数据上下文运行自定义 sql
语句的最佳方法是什么?我试过了:
db.ExecuteCommand(
"UPDATE tblCard SET used = 1 WHERE id IN (0) AND customer_id = 1",
Request.Form["ids"], customer_id
);
这对于通过表单传递的 1 个项目很好,但如果我通过例如“2,1”发布,那么我会收到 sqlclient
异常:
将 nvarchar 值 '2,1' 转换为数据类型 int 时转换失败。
如果我改为使用 string.format 插入参数,它可以正常工作,但显然这对 sql 注入是开放的。
【问题讨论】:
【参考方案1】:LINQ-to-SQL 不使用串联;这将是以下形式的 TSQL 查询:
WHERE id IN (@p0)
将@p0
设置为'123,456,789'
。
使用常规 LINQ,您可以使用 Contains
。使用ExecuteQuery
有几个选项;例如,您可以“按原样”传入 CSV,并使用 UDF 在数据库中拆分它,然后加入它:
UPDATE c SET c.used = 1
FROM dbo.SplitCsv(0) udf
INNER JOIN tblCard c
ON c.Id = udf.Value
AND c.Customer_ID = 1
dbo.SplitCsv
是互联网上众多此类“拆分”udf 之一。
【讨论】:
以上是关于IN 语句中的 Datacontext ExecuteCommand 参数的主要内容,如果未能解决你的问题,请参考以下文章