gpt4 book ai didi

c# - IN 语句中的 Datacontext ExecuteCommand 参数

转载 作者:太空狗 更新时间:2023-10-29 23:27:58 24 4
gpt4 key购买 nike

从 C# LinQ 到 sql 数据上下文,使用 IN 运行自定义 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 异常:

Conversion failed when converting the nvarchar value '2,1' to data type int.

如果我改为使用 string.format 来插入参数,它工作正常,但显然这对 sql 注入(inject)是开放的。

最佳答案

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 是 Internet 上可用的许多此类“拆分”udf 之一。

关于c# - IN 语句中的 Datacontext ExecuteCommand 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/781839/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com