如何检查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; } }
Exception像在其他答案中一样,将s用于控制逻辑被认为是不好的做法,并且会降低性能。它还会将误报发送给抛出的#个异常的事件探查器,上帝可以帮助任何将调试器设置为打破抛出的异常的人。
Exception
GetSchemaTable()也是许多答案中的另一个建议。这不是检查字段是否存在的首选方法,因为并不是所有版本都实现了它(它是抽象的,在某些版本的dotnetcore中抛出NotSupportedException)。GetSchemaTable也是性能过高的明智之选,因为如果您查看源代码,它是一个非常繁重的函数。
如果您经常使用这些字段,那么遍历这些字段可能会降低性能,并且可能需要考虑缓存结果。