SqlDataReaderをIDatareaderにキャストする最も簡単な方法は何ですか。
または、List<>オブジェクトをIDataReaderに変換する方が簡単/可能ですか
SqlDataReaderをIDatareaderにキャストする最も簡単な方法は何ですか。
または、List<>オブジェクトをIDataReaderに変換する方が簡単/可能ですか
SqlDataReaderをIDatareaderに変換する最も簡単な方法は何ですか
SqlDataReader
を実装しているのでIDataReader
、これは単なる暗黙のキャストです。
SqlDataReader typedReader = ...
IDataReader untypedReader = typedReader;
ASqlDataReader
は(インターフェースを実装するIDataReader
)ので、変換する必要はまったくありません。コードがを期待するところならどこでもIDataReader
、SQL実装を使用できます。
// Given a method with this signature
public void ProcessData(IDataReader reader);
// You can do this
SqlDataReader sqlReader = command.ExecuteReader();
ProcessData(sqlReader);
と:列挙可能であることList<T>
をIDataReader
除けば、これらは非常に異なることをします。最も顕著な違いは、データリーダーが列データへのアクセスを提供することです(主にIDataRecord
インターフェイスを実装しているため)。これはほとんどのリストには意味がありません。
データリーダーインターフェイスを介したアクセスを提供するアダプターを実装することもできList<T>
ますが、適合性が低く、かなりの作業量になります。
SqlDataReaderをIDatareaderに変換する最も簡単な方法は何ですか
それはいけません。SqlDataReader
CLASSはインターフェースではありませんIDataReader
。
キャスト(変数に割り当てる)には、
IDataReader untypedReader = typedReader;
しかし:これは変換ではありません。キャストです。インターフェイスをインスタンス化できないため、インターフェイスへの変換は定義ごとにできません。
または、キャストすることもできますが、前述のように、のすべてのプロパティとメソッドをIDbDataReader
使用できるため、ジェネリックインターフェイスを作成または使用しない限り、ほとんど不要ですSqlDataReader
。
((IDbDataReader)typedReader).SomeMethod();