DataReaderの列の存在を確認するか、特定の例外でデバッガーをブレークさせない

StackOverflow https://stackoverflow.com/questions/403215

  •  03-07-2019
  •  | 
  •  

質問

次のようなコードがあります:

  //System.Data.IDataRecord dr
  try
  {
       Consolidated = Utility.NullConvert.ToBool(dr[Constants.Data.Columns.cConsolidated], false);
  }
  catch (IndexOutOfRangeException) { } //swallow

統合された列がデータリーダーに表示されるかどうかわからないので、確認します。正常に動作します(ただし、少しハックします)。

ただし、デバッガーをアタッチすると、例外がスローされるたびにデバッガーが中断します。非常に迷惑です。

そのコードを記述するより良い方法はありますか。または、例外を無視して中断しないように指示するVisual Studioの方法があります(ただし、ここだけです;どこでもない)。

役に立ちましたか?

解決

はい、データリーダーのGetSchemaTable()メソッドを使用して列のリストを取得し、その列が存在するかどうかを確認できます。

これとよく似た質問が役立つ場合があります。

他のヒント

ループの開始時に GetOrdinal()を使用して、最初に列インデックスを見つけます(そして変数に格納します)。次に、> = 0 かどうかを確認します。これには、パフォーマンスを向上させるという利点もあります(名前ではなく、すべてのアクセスにこの整数を使用する限り)。

いいえ、特定の例外を無視するエレガントな方法はありません。捕まえて飲み込むこともできますが、それは良い方法ではありません。

次のコードを使用できます。

reader.GetSchemaTable().Columns.Contains("Your_Column")

これはブール値を返します。

If reader.GetSchemaTable().Columns.Contains("ContactID") Then
   ' Do something
End If
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top