我的代码如下:
//System.Data.IDataRecord dr
try
{
Consolidated = Utility.NullConvert.ToBool(dr[Constants.Data.Columns.cConsolidated], false);
}
catch (IndexOutOfRangeException) { } //swallow
我不知道合并列是否会出现在datareader中,所以我这样做是为了检查。它工作正常(虽然有点hackish。)
当我附加一个调试器时,它会在它抛出异常时中断。非常讨厌。
有没有更好的方法来编写该代码;或者是否有一些Visual Studio方式告诉它忽略异常而不是中断(但只是在这里;不是在任何地方)。
答案 0 :(得分:2)
是的,您可以使用datareader的GetSchemaTable()方法获取列列表,然后您可以查看该列是否存在。
您可能会发现this very similar question有帮助。
答案 1 :(得分:2)
我只是在循环开始时使用GetOrdinal()
来首先找到列索引(并存储在变量中)。然后检查它是否为>=0
。这样做的好处是也可以提高性能(只要你将这个整数用于所有访问,而不是名称)。
不,没有优雅的方法可以忽略特定的异常。你可以捕捉和吞咽,但这不是一个好方法。
答案 2 :(得分:-1)
您只需使用以下代码:
reader.GetSchemaTable().Columns.Contains("Your_Column")
这将返回一个布尔值。
If reader.GetSchemaTable().Columns.Contains("ContactID") Then
' Do something
End If