使用数组在 DB2 中选择计数查询

Posted

技术标签:

【中文标题】使用数组在 DB2 中选择计数查询【英文标题】:Select Count query in DB2 with Array 【发布时间】:2016-04-05 09:43:25 【问题描述】:

我正在尝试使用一个查询来计算我的 DB2 数据库中的所有记录,其中使用数组的内容来搜索表。

           string[] strNumbers = txtNumbers.Text.Split(new string[]  Environment.NewLine , StringSplitOptions.RemoveEmptyEntries);

               string strSearch = "";
                   strSearch = "SELECT COUNT(*) FROM TABLENAME WHERE NUMBER = '" + strNumbers + "' AND COMMENT = '" + strMessage + "'";

                DB2Command cmdSearchTable = new DB2Command(strSearch, db2Connection);

                int nodeCount = 0;
                nodeCount = int.Parse(cmdSearchTable.ExecuteScalar().ToString());

if (nodeCount == 0) 
 Not Found          
  else
   Found
   

此代码引发异常(“EXECUTE 或 OPEN 语句中的主变量的值超出了相应使用的范围。”)

但是,如果我使用 strNumbers.Length 它不会引发错误,但 nodeCount 它仍然为 0。

我需要循环它还是别的什么? 查询和数据库连接很好,因为我可以从同一个程序中选择、插入数据库。

谢谢

编辑 - 我已经设法解决了这个问题(见接受的答案),但现在有另一个问题。假设“1234567”在数据库中,一旦它返回 1 就可以了。如果输入它'5551234'不在数据库中,它返回0,这也很好。但是问题在于,如果输入是“1234567,5551234”,则 Count 将返回 1,因为 1234567 在数据库中,即使 5551234 不是。

有没有办法为 1234567 输出 1,然后为 5551234 输出 0?

【问题讨论】:

Db2 和 mysql 是不同的产品。不要标记未涉及的产品... strNumbers 是一个数组,所以你不能连接字符串和数组。预期的查询字符串是什么? 用户的预期输入将是数字,可能是 1234567 或 1234567、7654321 等。我想为这些数据库计数。它们都存储在数组 strNumbers 中。 @HariPrasad 我不熟悉DB2 语法,请耐心等待:-)。您的最终查询应该类似于 SELECT COUNT(*) FROM TABLENAME WHERE NUMBER = '" 1234567, 1234567, 7654321 "' AND COMMENT = '" + strMessage + "'" ? 是的,我刚刚用 Number = '1234567' 试了一下,结果很好。但我想使用我的 strNumbers 数组而不是静态的,因为用户可以输入任意数量的数字。 【参考方案1】:

尝试改变

WHERE NUMBER = '" + strNumbers + "' AND

WHERE NUMBER IN (" + strNumbers + ") AND

确保 strNumbers 以逗号分隔。根据字段 NUMBERS 的数据类型,类似“12345”、“12346”、“12347”或 12345、12346、12347 的内容。

【讨论】:

嗨,我在我的数组中添加了一个逗号 var strNewResult = string.Join(",", strNumbers);伯爵工作。谢谢你! :) 那么我认为你可以写这样的东西...... SELECT NUMBER, COUNT(*) FROM TABLENAME WHERE NUMBER IN ('1234567', '9876543') GROUP BY NUMBER 当我直接在数据库中进行查询但从我的 VS 中,它只需要一个计数并且似乎甚至没有注册第二个。 问题是当我认为您应该使用 ExecuteReader() 时,您正在使用 cmdSearchTable.ExecuteScalar(),它将返回一个记录集,其中包含与唯一 NUMBER 一样多的行。祝你好运!

以上是关于使用数组在 DB2 中选择计数查询的主要内容,如果未能解决你的问题,请参考以下文章

DB2 - 使用带有字符串数组参数的 Dapper 选择查询将不会返回正确的结果

DB2 中涉及会话表的选择查询执行缓慢

DB2 查询在 zend 的同一查询中从 2 个数据库中选择

使用 DB2 检索不区分大小写的 SQL 选择查询

DB2 选择设置参数,然后用参数值插入

异步选择 db2