使用WHERE .. IN条件创建SQL查询使用整数列表

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)

有些事情我做错了.总结一下,我需要步骤:

  1. 准备一个列表(包括避免SQL注入的机制),我需要提供给查询
  2. 使用我创建的列表作为参数创建查询

提前致谢!

Mar*_*ell 7

也许最简单的方法是添加一些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)语法略有不同.