我正在尝试从 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 语句)。
非常感谢有关如何使其发挥作用的一些指导。谢谢