Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 语句中的Datacontext ExecuteCommand参数_C#_Linq_Command_Datacontext_Execute - Fatal编程技术网

C# 语句中的Datacontext ExecuteCommand参数

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”

使用中的从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注入是开放的;这将是以下形式的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
是互联网上众多此类“拆分”自定义项之一