小编典典

检查SqlDataReader对象中的列名

c#

如何检查SqlDataReader对象中是否存在列?在我的数据访问层中,我创建了一个为多个存储过程调用构建相同对象的方法。其中一个存储过程具有其他存储过程未使用的附加列。我想修改该方法以适应每种情况。

我的应用程序是用C#编写的。


阅读 263

收藏
2020-05-19

共1个答案

小编典典

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也是性能过高的明智之选,因为如果您查看源代码,它是一个非常繁重的函数。

如果您经常使用这些字段,那么遍历这些字段可能会降低性能,并且可能需要考虑缓存结果。

2020-05-19