Tar*_*rta 0 c# sql sql-injection
我不是SQL的专家,我想要实现的是以下内容.
我有一个名为的整数列表PersonIds
.首先,我需要将这个整数列表转换为字符串列表.为什么?因为据我所知WHERE .. IN
,SQL中的条件是我需要提供给查询的变量.
然后我需要修改字符串列表以防止SQL注入,因此@
在每个Id
列表之前插入.
最后,我创建了查询并提供了刚刚创建的列表.
我试图做的是:
var listIds = string.Join(",@", PersonIds, 0, PersonIds.Count()));
var query = $"DELETE FROM PersonTable WHERE PersonId IN (@{listIds})";
Run Code Online (Sandbox Code Playgroud)
有些事情我做错了.总结一下,我需要步骤:
提前致谢!
也许最简单的方法是添加一些Dapper:
List<int> listIds = ...
connection.Execute("DELETE FROM PersonTable WHERE PersonId IN @listIds",
new { listIds });
Run Code Online (Sandbox Code Playgroud)
Dapper做了所有艰苦的工作,弄清楚如何参数化,同时仍然几乎接近常规TSQL.string_split
如果您使用的是最新版本的SQL Server,还可以选择启用用法,以最大限度地减少参数计数和查询计划高速缓存大小.
请注意,缺少的括号是故意的和有意的 - dapper对待这与常规IN (@foo, @bar)
语法略有不同.
归档时间: |
|
查看次数: |
82 次 |
最近记录: |