代码之家  ›  专栏  ›  技术社区  ›  AJ.

DataReader最佳实践

  •  9
  • AJ.  · 技术社区  · 15 年前

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

    dataReader.GetString(dataReader.GetOrdinal("ColumnName"));
    

    认为更好/更差/与此相同?

    (string) dataReader["ColumnName"];
    
    2 回复  |  直到 8 年前
        1
  •  11
  •   Andrew Hare    15 年前

    以下是我的做法:

    Int32 ordinal = dataReader.GetOrdinal("ColumnName");
    
    if (!dataReader.IsDBNull(ordinal))
        yourString = dataReader.GetString(ordinal);
    

    DBNull DataReader 当您尝试检索时,它将抛出异常。

        2
  •  9
  •   Joel Mueller    15 年前

    IDataReader 作为一个可枚举的,并且要处理 DbNull 通过返回可为null的int等,这让我可以检查null并使用C应用默认值# ?? 操作人员

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

    GetDataType() 伊达领班 .