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 句にもう 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 ステートメントを持つことはできません)。

これを機能させる方法についてのいくつかの指示は本当に感謝しています。ありがとうございました

4

0 に答える 0