0

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

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

command.CommandTimeout = 0;

但结果程序只是在我执行该行时挂起

OdbcDataReader readerRpt = command.ExecuteReader();

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

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

4

0 回答 0