1

クライアントの Oracle DB はリモートにあり、VPN 経由で接続しています。Oracle DB への接続に使用するすべてのソフトウェア (Oracle Client、.Net Client for Oracle など) をインストールしており、アプリケーションの他の部分で DB を接続/使用できます。だからそれは問題ではありません。

この状況では、データを DataTable にロードします。次の関数を使用すると、クエリが 3 ~ 4k のレコードを返すときに、データが DataTable に読み込まれます。数秒かかりますが、うまくいきます。

Sql クエリを実行して DataTable を取得するために呼び出す関数は次のとおりです。

    /// <summary>Returns a DataTable based on input query</summary>
    /// <param name="sqlString">sql to execute</param>
    /// <returns>returns DataTable</returns>
    public DataTable ExecuteDataTable(String sqlString)
    {
        OpenConnection();
        DataTable tbl = new DataTable();
        _oracleCommand.CommandText = sqlString;

        try
        {
            using (OracleDataAdapter dbAdapter = new OracleDataAdapter(_oracleCommand))
                dbAdapter.Fill(tbl);                
        }
        catch (OracleException ex)
        {
            CloseConnection();
            throw new Exception(sqlString, ex);
        }
        finally
        {
            CloseConnection();
        }

        return tbl;
    }

しかし、巨大な DataTable にデータをロードしようとすると、スタックします。ロードするレコードは約 140k で、それ以上になることもあります。クエリは何も返しません。15~20分ほど結果を待ちましたが、何も表示されません。また、エラーもスローされません。

プログラムは次の行でスタックします。

dbAdapter.Fill(tbl);

なぜ何か考えはありますか?

よろしく、 アーミル

4

0 に答える 0