代码之家  ›  专栏  ›  技术社区  ›  Tom Ritter

检查DataReader中是否存在列,或者在某些异常情况下不使调试器中断

  •  3
  • Tom Ritter  · 技术社区  · 17 年前

    我有如下代码:

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

    我不知道合并列是否会出现在datareader中,所以我这样做是为了检查。它工作得很好(不过有点粗糙)。

    然而,当我附加一个调试器时,每当它抛出异常时,它就会中断调试器。非常烦人。

    有没有更好的方法来编写代码;或者,是否有某种VisualStudio方法告诉它忽略异常而不中断(但仅限于此处;而不是所有地方)。

    3 回复  |  直到 15 年前
        1
  •  2
  •   Community Mohan Dere    9 年前

    是的,您可以使用datareader的GetSchemaTable()方法获取列列表,然后可以查看该列是否存在。

    你可能会发现 this very similar question 有用的

        2
  •  2
  •   Marc Gravell    17 年前

    GetOrdinal() 在循环开始时,首先查找列索引(并存储在变量中)。那就检查一下是不是 >=0 . 这也有提高性能的优点(只要您对所有访问使用这个整数,而不是名称)。

    不,没有一种优雅的方式可以忽略特定的异常。你可以抓住并吞咽,但这不是一个好方法。

        3
  •  -1
  •   Chad    10 年前

    您可以简单地使用以下代码:

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

    If reader.GetSchemaTable().Columns.Contains("ContactID") Then
       ' Do something
    End If