检查 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 中是不是存在列或不使调试器在某些异常上中断的主要内容,如果未能解决你的问题,请参考以下文章