从C#LinQ到sql datacontext使用sql
运行自定义IN
语句的最佳方法是什么?我试过了:
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注入开放。
答案 0 :(得分:4)
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之一。