首页 / .NET / 正文

[.NET].NET应用程序开发中如何检测一个SqlDataReader对象中是否包含某个列名?

1618 1 发布于: 2018-10-31 读完约需6分钟

问题描述

如题,在.NET应用程序开发中,如何检测判断一个SqlDataReader对象中是否包含某个列名?

方案一

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

方案二

public static bool HasColumn(IDataReader Reader, string ColumnName) { 
    foreach (DataRow row in Reader.GetSchemaTable().Rows) { 
        if (row["ColumnName"].ToString() == ColumnName) 
            return true; 
    }
    return false; 
}

方案三

使用DataReader的GetOrdinal()方法,如果没有找个指定的列名,则会抛出IndexOutOfRangeException的异常,如下:

public static bool HasColumn(this IDataRecord r, string columnName)
{
    try
    {
        return r.GetOrdinal(columnName) >= 0;
    }
    catch (IndexOutOfRangeException)
    {
        return false;
    }
}

方案四

使用LINQ实现,代码如下:

var exists = Enumerable.Range(0, dr.FieldCount).Any(i => string.Equals(dr.GetName(i), fieldName, StringComparison.OrdinalIgnoreCase));

方案五

bool hasColumnName = reader.GetSchemaTable().AsEnumerable().Any(c => c["ColumnName"] == "YOUR_COLUMN_NAME");

方案六

public static class DataReaderExtensions
{
    public static bool IsDBNull(this IDataReader dataReader, string columnName)
    {
        return dataReader[columnName] == DBNull.Value;
    }

    public static bool ContainsColumn(this IDataReader dataReader, string columnName)
    {
        try
        {
            return dataReader.GetOrdinal(columnName) >= 0;
        }
        catch (IndexOutOfRangeException)
        {
            return false;
        }
    }
}

调用示例代码:

var contains = return dataReader.ContainsColumn("ColumnName");

版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。

上一篇: [ASP.NET Core]ASP.NET Core应用程序开发中如何获取当前登录用户的登录信息?

下一篇: [.NET].NET应用程序开发中如何修改WebClient对象的超时时间(timeout)?

本文永久链接码友网 » [.NET].NET应用程序开发中如何检测一个SqlDataReader对象中是否包含某个列名?

分享扩散:

发表评论

登录用户才能发表评论, 请 登 录 或者 注册