将数组作为值传递到ado.net DBParameter中

Joc*_*hen 6 c# sql-server oracle ado.net

我正在研究的项目有很多IN查询,例如:

SELECT something, anotherthing
FROM atable
WHERE something IN (value1, value2, value3)
Run Code Online (Sandbox Code Playgroud)

这是在IN部分中具有3个参数的查询的示例,但是可以使用1或2或5或10或...参数执行相同的查询.问题是每个查询在数据库中都有一个其他执行计划,使其变慢.

我想要这样的查询:

SELECT something, anotherthing
FROM atable
WHERE something IN (@value1, @value2, @value3)
Run Code Online (Sandbox Code Playgroud)

或这个:

SELECT something, anotherthing
FROM atable
WHERE something IN (@values)
Run Code Online (Sandbox Code Playgroud)

我用一些辅助函数完成了第一个查询,但是每个参数的数量仍然有不同的执行计划.这可以用第二个解决.

将数组作为数据库参数传递的最佳方法是什么?我正在使用Oracle和SQL Server,欢迎使用这两种解决方案.

Mar*_*ell 4

对于 SQL-Server,有两种常见的方法。要避免的第三个选项是传入 avarchar并将其连接到动态 SQL 语句中IN- 这是一个明显的注入攻击面。

合理选择: