检查 DataReader 中是不是存在列或不使调试器在某些异常上中断

Posted

技术标签:

【中文标题】检查 DataReader 中是不是存在列或不使调试器在某些异常上中断【英文标题】:Check for existence of column in DataReader OR not make debugger break on certain exceptions检查 DataReader 中是否存在列或不使调试器在某些异常上中断 【发布时间】:2008-12-31 15:32:13 【问题描述】:

我的代码看起来像:

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

我不知道合并列是否会出现在数据阅读器中,所以我这样做是为了检查。它工作正常(不过有点老套)。

但是,当我附加一个调试器时,它会在它抛出异常时中断。非常烦人。

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

【问题讨论】:

【参考方案1】:

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

您可能会发现this very similar question 很有帮助。

【讨论】:

我不得不转换界面;但这运作良好。我无法使用 GetOrdinal,因为这引发了我试图避免的相同异常。 SchemaTable 不是 DataReader 所指的表,8 年多过去了,但在问这个问题时,谷歌仍然会弹出这个页面。【参考方案2】:

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

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

【讨论】:

【参考方案3】:

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

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

这将返回一个布尔值。

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

【讨论】:

我认为这行不通。 Columns 这里是不同的集合,不是结果集的字段集合。 @nawfal 确认,这不是解决方案。

以上是关于检查 DataReader 中是不是存在列或不使调试器在某些异常上中断的主要内容,如果未能解决你的问题,请参考以下文章

检查 DataReader 中是不是存在列的最佳方法

如何检查sql的第一列或第二列中是不是存在一个特定值?

如何检查 ViewBag 属性是不是为空或不存在

如何检查 ReportControl 对象上是不是存在 Reportid 或不使用 *ngif?

检查字典是不是存在于字符串中

使用python搜索数据框的另一列或另一个数据框中是不是存在任何单词