このデータからレポートを作成するには、dbから別のレコード(1000.000)を大量に取得する必要があります。私のDBはリモートシステム上にあります。これで、各レポートに異なるSQL文が作成されました。このSQL文は、サービスに送信されます。このサービスはDataSetを埋め込み、これをアプリケーションに返します。これで、DataSetをレポートにバインドできます。 問題は、レコード数のデータセットには膨大なメモリ消費があることです。つまり、データをロードすると、1回のロードでメモリが1GBに上昇します。dbからコードへの大量の未知のデータ
このメモリを消費しないでデータをロードする方法はありますか? 私はすでにNHibernateのようなORMを使用していますが、問題はロードされるデータがわからないということです。変更できるSQLステートメントが異なる数百ものレポートがあるので、マップするクラスを何百も作成できません...
編集:あなたが尋ねるべき
DataSet dataSet = new DataSet();
try
{
using (FbConnection connection = new FbConnection(strConnString))
{
connection.Open();
using (FbCommand cmd =
new FbCommand(
"SELECT * FROM CUSTOMERS;",
connection))
{
FbDataAdapter fbd = new FbDataAdapter(cmd);
fbd.Fill(dataSet);
// This is what the default ADO.Net provider can do..
//SqlCommand command = new SqlCommand(queryString, connection);
//System.Xml.XmlReader reader = command.ExecuteXmlReader();
}
}
}
catch (Exception ex)
{
}
ウェブサービスは自分のアプリケーションでのみ使用されます。私はdbからデータをロードする必要があり、DataSetはfirebirdとADO.Netプロバイダを使用している方法でそれを行う唯一の方法でした。 DataSetをXMLやJsonなどに解析すると、パフォーマンス上の問題が発生します。 XMLにデータを直接ロードする可能性があるとすれば、これは良いことだが、これまでに何も見つかりませんでした。データセットにロードしてXMLに書き込む方法があります。 Orginal SQLCommandクラスにはExecuteXmlReader()のようなものがありますが、このFirebirdプロバイダ(FBCommand)のようなものはありません。 – Franki1986
何かがここにあります... ADO.Netの基本的な戻り構造は、DataSetではなく、* DataReader *です。このフレームワークは、DataReaderをDataSetに読み込むための便利なメソッドを提供しますが、これは私の知る限り、ADO.Netのユーザーが明示的に実行する必要があります。 –
私は何かを説明するためにいくつかのコードを書いています。 – Franki1986