运行自定义的最佳方式是什么sql
声明使用IN
从 C# LinQ 到 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 注入是开放的。
LINQ-to-SQL 不使用串联;这将是以下形式的 TSQL 查询:
WHERE id IN (@p0)
with @p0
set to '123,456,789'
.
通过常规 LINQ,您可以使用Contains
. With 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}
Where dbo.SplitCsv
是互联网上可用的许多此类“分割”udf 之一。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)