【问题标题】:Datacontext ExecuteCommand parameters in IN statementIN 语句中的 Datacontext ExecuteCommand 参数
【发布时间】: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 注入是开放的。

【问题讨论】:

    标签: c# linq command datacontext execute


    【解决方案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 之一。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-15
      • 2014-09-24
      相关资源
      最近更新 更多