首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DataReader最佳实践

DataReader最佳实践
EN

Stack Overflow用户
提问于 2009-12-06 22:39:51
回答 2查看 13.4K关注 0票数 9

this question类似,但答案从来没有真正达到我想知道的程度。从DataReader获取值有什么标准吗?也就是说,这是

代码语言:javascript
复制
dataReader.GetString(dataReader.GetOrdinal("ColumnName"));

被认为是更好/更坏/一样的吗?

代码语言:javascript
复制
(string) dataReader["ColumnName"];
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-12-06 22:41:55

下面是我这样做的方法:

代码语言:javascript
复制
Int32 ordinal = dataReader.GetOrdinal("ColumnName");

if (!dataReader.IsDBNull(ordinal))
    yourString = dataReader.GetString(ordinal);

像我上面所展示的那样检查DBNull非常重要,因为如果DataReader中的字段为空,那么当您试图检索它时,它将抛出一个异常。

票数 11
EN

Stack Overflow用户

发布于 2009-12-07 01:34:50

我创建了一些扩展方法,使我可以将IDataReader视为可枚举对象,并通过返回可为空的int来处理DbNull,等等。这使我可以检查null并使用C# ??运算符应用默认值。

代码语言:javascript
复制
/// <summary>
/// Returns an IEnumerable view of the data reader.
/// WARNING: Does not support readers with multiple result sets.
/// The reader will be closed after the first result set is read.
/// </summary>
public static IEnumerable<IDataRecord> AsEnumerable(this IDataReader reader)
{
    if (reader == null)
        throw new ArgumentNullException("reader");

    using (reader)
    {
        while (reader.Read())
        {
            yield return reader;
        }
    }
}

public static int? GetNullableInt32(this IDataRecord dr, string fieldName)
{
    return GetNullableInt32(dr, dr.GetOrdinal(fieldName));
}

public static int? GetNullableInt32(this IDataRecord dr, int ordinal)
{
    return dr.IsDBNull(ordinal) ? null : (int?)dr.GetInt32(ordinal);
}

IDataReader上的其他GetDataType()方法执行...and等操作。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1855556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档