DataReaderの列の存在を確認するか、特定の例外でデバッガーをブレークさせない
-
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
所属していません StackOverflow