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

.NET 作者: Rector 28阅读 0评论 0收藏 收藏本文

郑重申明:本文未经许可,禁止任何形式转载

问题描述

如题,在.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");

阅读了该文章的人还浏览了...

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

发布于: 2018-10-31 07:29:58
分享扩散: