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



