DataSetをDataReaderに変換するにはどうすればよいですか?
6 に答える
次のコードを使用して、データセットを次のように変更できますDataReader
。
DataTableReader rd = ds.Tables[0].CreateDataReader();
DataSetとDataTableはどちらも、DataTableReaderを作成するメソッドCreateDataReaderを公開しています。これらのリンクを確認してください-
http://msdn.microsoft.com/en-us/library/system.data.dataset.createdatareader.aspx
http://msdn.microsoft.com/en-us/library/system.data.datatable.createdatareader.aspx
DataSet
CreateDataReader
を作成するというメソッドがありDataTableReader
ますが、を作成できるとは思いませんDataReader
。
DataSetは、切断されたメモリ内オブジェクトです。DataReaderは、接続された単方向オブジェクトです。
だからそれは不可能だと思います。
本当に必要ですか?
DataSetを反復処理する場合は、DataReaderは必要ありません。DataSetは切断されたメモリ内オブジェクトであるため、for-eachを使用して反復処理します。
foreach(var row in ds.Tables["YourTable"])
{
var value = row.Field<int>("ID"); // etc
}
DataSetをDbDataReaderに変換することはできません。
ただし、DataSetでCreateDataReaderメソッドを呼び出すことにより、DataSetから結果を読み取るDbDataReaderを作成できます。
しかし、これは奇妙なことのように思えます。DataSetのTablesプロパティとDataTableのRowsプロパティを使用して、DataSetに含まれる結果を簡単に繰り返すことができます。DbDataReaderを使用すると、結果へのアクセスのみを転送するように制限されます。DbDataReaderを使用することで得られる唯一の利点は、パラメーターとして必要なAPI呼び出しを行う場合です。
DataSetがデータベースからのSELECTコマンドの結果である場合は、DbCommand.ExecuteReader()を呼び出すことでDbDataReaderを取得できるはずです。これにより、DataSetが完全に切り取られ、より効率的な結果が得られます。