OdbcDataReader在长查询时挂起

时间:2013-01-17 14:49:32

标签: c#

我正在尝试从iSeries数据库中提取数据并从数据中创建Excel报告。我正在使用C#和EPPlus库来执行此操作。下面是我的代码,用于生成repor:

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 Access ODBC驱动程序] [DB2 UDB] SQL0666    - SQL查询超出指定的时间限制或存储限制。

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

command.CommandTimeout = 0;

但结果是程序在我执行行

时挂起
OdbcDataReader readerRpt = command.ExecuteReader();

没有很多数据(大约1,000行)所以我认为它不会超过存储限制。或者它是基于我可以在查询字符串中放入多少个字符? (这意味着我不能有一个很长的SQL语句。)

非常感谢有关如何使其发挥作用的一些指导。谢谢

0 个答案:

没有答案