C# 语句中的Datacontext ExecuteCommand参数
使用中的从C#LinQ到sql数据上下文运行自定义的sql语句的最佳方法是什么?我试过:C# 语句中的Datacontext ExecuteCommand参数,c#,linq,command,datacontext,execute,C#,Linq,Command,Datacontext,Execute,使用中的从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”
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注入是开放的;这将是以下形式的TSQL查询:
WHERE id IN (@p0)
将@p0
设置为'123456789'
对于常规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
是互联网上众多此类“拆分”自定义项之一