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 句にもう 1 つ指定を追加すると、エラーが発生しました。
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 ステートメントを持つことはできません)。
これを機能させる方法についてのいくつかの指示は本当に感謝しています。ありがとうございました