5

使用从 C# LinQ 到 sql数据上下文运行自定义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 注入是开放的。

4

1 回答 1

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 之一在哪里。

于 2009-04-23T14:10:01.710 回答