DB2 - Select 使用带有字符串数组参数的 Dapper 查询将不会 return 正确的结果
DB2 - Select query using Dapper with String Array parameter will not return correct results
我在使用 Select 查询时遇到问题:DB2、Dapper、IN 子句。
我正在尝试将一个字符串数组传递给查询。查询本身工作正常,但查询仅从数组中获取第一个值,即(sudo 代码,因为我将在 C# 代码中使用它)
Select col1, col1, col3 from schema.tblName
Where col1 = ? AND col2 IN (?)
现在,关于设置的更多上下文,在 MSSQL 和 DB2 中使用 Dapper 进行查询是有区别的。
我的 DB2 设置为仅采用基于位置的参数,所以?代替参数(我无法控制这个)并且我不能使用命名参数。
在 C# 中,我试过这样的事情:
var parameters = new {"1", new[]{"1000","2000"}};
var results = conn.Query<dynamic>(aboveSql, paramers);
所有这些工作正常,编译和运行正常。但是查询不会为第二个字符串数组值 return 值(这是 Select 语句的 IN 子句)。
对于字符串数组的第一个值,它只会 return 结果。
我做了一些广泛的研究,试图应用不同的技术,下面也是 link
https://huorswords.github.io/dapper/parameters/sql/in/2019/07/16/dapper-avoid-parentheses-IN-clause.html
(请记住,上面 link 适用于 MSSQL 而不是 DB2)。
尝试更改查询,删除括号不成功。
尝试将参数类型从 String[]{} 更改为 List 或 IEnumerable - 仍然不行。
我检查了 Dapper 文档 - 他们都说支持 IN 子句。
任何人都知道如何在 DB2 中将 IN 子句与 Array 参数一起使用,并且可以提出解决方案,我将不胜感激。
谢谢
根据this页面,您可以使用伪位置参数。
看起来像这样:
string sql = "SELECT col1, col1, col3 from schema.tblName WHERE col1 = ?param1? AND col2 IN ?param2?";
var results = conn.Query<dynamic>(sql, new {param1 = "1", param2 = new[]{"1000","2000"}});
?param1?将被取代? param1
成员将作为位置参数插入,同样是 param2。
EDIT:删除了 IN 表达式周围的括号。应该是Dapper插的。
我在使用 Select 查询时遇到问题:DB2、Dapper、IN 子句。 我正在尝试将一个字符串数组传递给查询。查询本身工作正常,但查询仅从数组中获取第一个值,即(sudo 代码,因为我将在 C# 代码中使用它)
Select col1, col1, col3 from schema.tblName
Where col1 = ? AND col2 IN (?)
现在,关于设置的更多上下文,在 MSSQL 和 DB2 中使用 Dapper 进行查询是有区别的。 我的 DB2 设置为仅采用基于位置的参数,所以?代替参数(我无法控制这个)并且我不能使用命名参数。
在 C# 中,我试过这样的事情:
var parameters = new {"1", new[]{"1000","2000"}};
var results = conn.Query<dynamic>(aboveSql, paramers);
所有这些工作正常,编译和运行正常。但是查询不会为第二个字符串数组值 return 值(这是 Select 语句的 IN 子句)。 对于字符串数组的第一个值,它只会 return 结果。
我做了一些广泛的研究,试图应用不同的技术,下面也是 link https://huorswords.github.io/dapper/parameters/sql/in/2019/07/16/dapper-avoid-parentheses-IN-clause.html (请记住,上面 link 适用于 MSSQL 而不是 DB2)。
尝试更改查询,删除括号不成功。
尝试将参数类型从 String[]{} 更改为 List 或 IEnumerable - 仍然不行。 我检查了 Dapper 文档 - 他们都说支持 IN 子句。
任何人都知道如何在 DB2 中将 IN 子句与 Array 参数一起使用,并且可以提出解决方案,我将不胜感激。
谢谢
根据this页面,您可以使用伪位置参数。
看起来像这样:
string sql = "SELECT col1, col1, col3 from schema.tblName WHERE col1 = ?param1? AND col2 IN ?param2?";
var results = conn.Query<dynamic>(sql, new {param1 = "1", param2 = new[]{"1000","2000"}});
?param1?将被取代? param1
成员将作为位置参数插入,同样是 param2。
EDIT:删除了 IN 表达式周围的括号。应该是Dapper插的。