小编典典

检查 SqlDataReader 对象中的列名

all

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

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


阅读 104

收藏
2022-06-07

共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;
    }
}

像在其他一些答案中一样将Exceptions 用于控制逻辑被认为是不好的做法并且具有性能成本。它还将误报发送到#异常抛出的分析器,上帝帮助任何人设置他们的调试器来打破抛出的异常。

GetSchemaTable() 也是许多答案中的另一个建议。这不是检查字段是否存在的首选方式,因为它并非在所有版本中都实现(它是抽象的,并且在某些版本的
dotnetcore 中抛出 NotSupportedException)。GetSchemaTable
在性能方面也过于矫枉过正,因为如果您查看源代码
,它是一个非常繁重的功能。

如果您经常使用循环字段,可能会对性能产生很小的影响,并且您可能需要考虑缓存结果。

2022-06-07