6

SqlDataReaderをIDatareaderにキャストする最も簡単な方法は何ですか。

または、List<>オブジェクトをIDataReaderに変換する方が簡単/可能ですか

4

4 に答える 4

9

SqlDataReaderをIDatareaderに変換する最も簡単な方法は何ですか

SqlDataReaderを実装しているのでIDataReader、これは単なる暗黙のキャストです。

SqlDataReader typedReader = ...
IDataReader untypedReader = typedReader;
于 2010-11-19T14:01:37.210 に答える
3

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>ますが、適合性が低く、かなりの作業量になります。

于 2010-11-19T14:02:56.370 に答える
3

SqlDataReaderをIDatareaderに変換する最も簡単な方法は何ですか

それはいけません。SqlDataReaderCLASSはインターフェースではありませんIDataReader

キャスト(変数に割り当てる)には、

IDataReader untypedReader = typedReader; 

しかし:これは変換ではありません。キャストです。インターフェイスをインスタンス化できないため、インターフェイスへの変換は定義ごとにできません。

于 2010-11-19T14:03:06.133 に答える
1

または、キャストすることもできますが、前述のように、のすべてのプロパティとメソッドをIDbDataReader使用できるため、ジェネリックインターフェイスを作成または使用しない限り、ほとんど不要ですSqlDataReader

((IDbDataReader)typedReader).SomeMethod();
于 2010-11-19T14:02:57.630 に答える