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

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

您可能会发现这个非常相似的问题很有帮助。

于 2008-12-31T15:38:16.707 回答
2

我会简单地GetOrdinal()在循环开始时首先使用来查找列索引(并存储在变量中)。然后只需检查它是否是>=0. 这也具有提高性能的优点(只要您随后将此整数用于所有访问,而不是名称)。

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

于 2008-12-31T15:44:47.363 回答
-1

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

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

这将返回一个布尔值。

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