2012-04-04 5 views
1

IDataReaderから値を取得する方法は複数あります。特定のメソッドを使用してIDataReaderから値を取得する利点はありますか?

reader["FirstName"]; // by column name array style. 
reader[0];   // by index array style. 
reader.GetValue(0); // by index method style. 
reader.GetString(0); // by index using specific method. 

これらのうちの1つは他のものより優れていますか?いずれにもパフォーマンスの欠点がありますか?

答えて

2

カラム名を使用しない場合はほとんどありません。技術的には、列名はインデックスに変換されるため、インデックスを直接使用するほうが少し速くなります。しかし、そのマージンはデータベース呼び出し自体に比べて小さくなりすぎるので、実際には意味がありません。そして、あなたが戻ってくる列にセマンティックな意味があると仮定し、何らかの汎用データ・プロセッサーを実装していないと仮定すると、索引を使用すると、クエリのデータが変更されたときに誤って将来バグが発生する可能性が高くなります。

2

reader.GetValue(0)が最も速い方法です。

reader["FirstName"]を使用してreader.GetOrdinal("FirstName")を呼び出し、reader.GetValue(0)を呼び出します。 reader[0]は、ゲッターにreader.GetValue(0)と呼ばれるだけです。

+0

可読性の観点から、私は列名の変種を使用します。 – Joey

+0

技術的には実際に使用されるIDataReaderの実装に依存します。 IDataReaderは単なるインタフェースなので、それに関連する特定のパフォーマンスはありません。 SqlDataReaderを使用すると、上記のことに同意するでしょう。 –

+0

@AdamGritt、trueですが、これは 'OleDbDataReader'実装のものです。 – scottm

関連する問題