如何检查SqlDataReader对象中是否存在列?在我的数据访问层中,我创建了一个为多个存储过程调用构建相同对象的方法。其中一个存储过程具有其他存储过程未使用的附加列。我想修改该方法以适应每种情况。
SqlDataReader
我的应用程序是用 C# 编写的。
public static class DataRecordExtensions { public static bool HasColumn(this IDataRecord dr, string columnName) { for (int i=0; i < dr.FieldCount; i++) { if (dr.GetName(i).Equals(columnName, StringComparison.InvariantCultureIgnoreCase)) return true; } return false; } }
像在其他一些答案中一样将Exceptions 用于控制逻辑被认为是不好的做法并且具有性能成本。它还将误报发送到#异常抛出的分析器,上帝帮助任何人设置他们的调试器来打破抛出的异常。
Exception
GetSchemaTable() 也是许多答案中的另一个建议。这不是检查字段是否存在的首选方式,因为它并非在所有版本中都实现(它是抽象的,并且在某些版本的 dotnetcore 中抛出 NotSupportedException)。GetSchemaTable 在性能方面也过于矫枉过正,因为如果您查看源代码,它是一个非常繁重的功能。
如果您经常使用循环字段,可能会对性能产生很小的影响,并且您可能需要考虑缓存结果。