C# OdbcDataReader挂起长查询

C# OdbcDataReader挂起长查询,c#,C#,我试图从iSeries数据库中提取数据,并从数据中创建Excel报告。我正在使用C#和EPPlus库来实现这一点。下面是我生成报告的代码: queryString = @"SELECT oacspo, pldesc, obivdt, oainno, obitno, obitd1, obitd2, obqtsh, obaslp, oblnam FROM myLib.hshed LEFT JOIN myLib.cusms

我试图从iSeries数据库中提取数据,并从数据中创建Excel报告。我正在使用C#和EPPlus库来实现这一点。下面是我生成报告的代码:

queryString = @"SELECT oacspo, pldesc, obivdt, oainno, obitno, obitd1, obitd2, obqtsh, obaslp, oblnam
              FROM myLib.hshed 
              LEFT JOIN myLib.cusms 
                ON oacsno = cmcsno
              LEFT JOIN myLib.hsdet
                ON oahssq = obhssq
              LEFT JOIN myLib.itemctrl
                ON obitno = icitno
              LEFT JOIN myLib.plinesj
                ON icline = plcode
              WHERE (oaipdt BETWEEN ? AND ?) AND icdlcu = 'Y' AND oacsno = ?
              ORDER BY pldesc, oainno, obitno";
          command = new OdbcCommand(queryString, connection);
          command.CommandTimeout = 0;
          parameter = command.Parameters.Add("@DateStart", OdbcType.Int);
          parameter.Value = startDate;
          parameter = command.Parameters.Add("@DateEnd", OdbcType.Int);
          parameter.Value = endDate;
          parameter = command.Parameters.Add("@CustomerNo", OdbcType.Int);
          parameter.Value = custNo;
          OdbcDataReader readerRpt = command.ExecuteReader();
这一个运行正常,但当我向WHERE子句添加一个规范(缩小到特定部门)时,我得到一个错误:

WHERE (oaipdt BETWEEN ? AND ?) AND icdlcu = 'Y' AND oacsno = ? AND icline = 'O'
错误:错误[HY000][IBM][iSeries访问ODBC驱动程序][DB2 UDB]SQL0666 -SQL查询超出指定的时间限制或存储限制

我做了一些研究,并将CommandTimeout属性更改为0

command.CommandTimeout = 0;
但结果是,当我执行该行时,程序挂起

OdbcDataReader readerRpt = command.ExecuteReader();
数据量不多(大约1000行),所以我不认为它超出了存储限制。还是基于我可以在查询字符串中输入多少字符?(这意味着我不能有一个长的SQL语句)


我们非常感谢您对如何使其发挥作用的一些指导。谢谢

报告可能只返回1000行,但如果您加入的列没有正确索引,则连接可能会出现问题。例如,当加入到另一个表以按部门进行筛选时,可能会因为索引不正确而对一百万行进行表扫描。。。或者像那样检查一下在加入部门中使用的专栏…也打败我吧,它是昆顿。我们在这里讨论的是什么尺寸的表?itemctrl只有6000行,而Pline只有12行。hshed和hesdet有成吨的行。一旦我取出plines的联接,查询运行正常,但我没有部门描述。我已经更改了代码,以便它查看部门代码,将部门描述放在Excel中,而不是查询它