我的代码如下:

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

我不知道合并列是否会出现在datareader中,所以我这样做是为了检查。它工作正常(虽然有点hackish。)

当我附加一个调试器时,它会在它抛出异常时中断。非常讨厌。

有没有更好的方法来编写该代码;或者是否有一些Visual Studio方式告诉它忽略异常而不是中断(但只是在这里;不是在任何地方)。

有帮助吗?

解决方案

是的,您可以使用datareader的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