C# OdbcDataReader挂起长查询
我试图从iSeries数据库中提取数据,并从数据中创建Excel报告。我正在使用C#和EPPlus库来实现这一点。下面是我生成报告的代码: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
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中,而不是查询它