クライアントの 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);
なぜ何か考えはありますか?
よろしく、 アーミル