3

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

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

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

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

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

4

3 に答える 3

2

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

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

于 2008-12-31T15:44:47.363 に答える
2

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

この非常によく似た質問が役立つ場合があります。

于 2008-12-31T15:38:16.707 に答える
-1

次のコードを使用するだけです。

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

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

If reader.GetSchemaTable().Columns.Contains("ContactID") Then
   ' Do something
End If
于 2009-05-07T12:27:02.480 に答える