SqlDataReader 类

定义

提供一种从 SQL Server 数据库中读取只进的行流的方式。 此类不能被继承。

public ref class SqlDataReader : System::Data::Common::DbDataReader, IDisposable, System::Data::Common::IDbColumnSchemaGenerator
public ref class SqlDataReader : System::Data::Common::DbDataReader, IDisposable
public ref class SqlDataReader sealed : MarshalByRefObject, IDisposable, System::Collections::IEnumerable, System::Data::IDataReader
public class SqlDataReader : System.Data.Common.DbDataReader, IDisposable, System.Data.Common.IDbColumnSchemaGenerator
public class SqlDataReader : System.Data.Common.DbDataReader, IDisposable
public sealed class SqlDataReader : MarshalByRefObject, IDisposable, System.Collections.IEnumerable, System.Data.IDataReader
type SqlDataReader = class
    inherit DbDataReader
    interface IDisposable
    interface IDbColumnSchemaGenerator
type SqlDataReader = class
    inherit DbDataReader
    interface IDisposable
type SqlDataReader = class
    inherit MarshalByRefObject
    interface IEnumerable
    interface IDataReader
    interface IDisposable
    interface IDataRecord
type SqlDataReader = class
    inherit DbDataReader
    interface IDataReader
    interface IDisposable
    interface IDataRecord
Public Class SqlDataReader
Inherits DbDataReader
Implements IDbColumnSchemaGenerator, IDisposable
Public Class SqlDataReader
Inherits DbDataReader
Implements IDisposable
Public NotInheritable Class SqlDataReader
Inherits MarshalByRefObject
Implements IDataReader, IDisposable, IEnumerable
继承
SqlDataReader
继承
继承
SqlDataReader
实现

示例

以下示例创建 SqlConnectionSqlCommand、 和 SqlDataReader。 该示例通读数据,将其写入控制台窗口。 然后,代码关闭 SqlDataReader。 在 SqlConnection 代码块末尾 using 自动关闭 。

using System;
using System.Data;
using System.Data.SqlClient;

class Program
{
    static void Main()
    {
        string str = "Data Source=(local);Initial Catalog=Northwind;"
            + "Integrated Security=SSPI";
        ReadOrderData(str);
    }

    private static void ReadOrderData(string connectionString)
    {
        string queryString =
            "SELECT OrderID, CustomerID FROM dbo.Orders;";

        using (SqlConnection connection =
                   new SqlConnection(connectionString))
        {
            SqlCommand command =
                new SqlCommand(queryString, connection);
            connection.Open();

            SqlDataReader reader = command.ExecuteReader();

            // Call Read before accessing data.
            while (reader.Read())
            {
                ReadSingleRow((IDataRecord)reader);
            }

            // Call Close when done reading.
            reader.Close();
        }
    }

    private static void ReadSingleRow(IDataRecord dataRecord)
    {
        Console.WriteLine(String.Format("{0}, {1}", dataRecord[0], dataRecord[1]));
    }
}
Option Explicit On
Option Strict On

Imports System.Data
Imports System.Data.SqlClient

Module Module1

    Sub Main()
        Dim str As String = "Data Source=(local);Initial Catalog=Northwind;" _
       & "Integrated Security=SSPI;"
        ReadOrderData(str)
    End Sub

    Private Sub ReadOrderData(ByVal connectionString As String)
        Dim queryString As String = _
            "SELECT OrderID, CustomerID FROM dbo.Orders;"

        Using connection As New SqlConnection(connectionString)
            Dim command As New SqlCommand(queryString, connection)
            connection.Open()

            Dim reader As SqlDataReader = command.ExecuteReader()

            ' Call Read before accessing data.
            While reader.Read()
                ReadSingleRow(CType(reader, IDataRecord))
            End While

            ' Call Close when done reading.
            reader.Close()
        End Using
    End Sub

    Private Sub ReadSingleRow(ByVal record As IDataRecord)
       Console.WriteLine(String.Format("{0}, {1}", record(0), record(1)))

    End Sub

End Module

注解

若要创建 SqlDataReader,必须调用 ExecuteReader 对象的 方法 SqlCommand ,而不是直接使用构造函数。

SqlDataReader使用 时,关联的 SqlConnection 正忙于为 提供服务SqlDataReader,除了关闭它之外,不能对SqlConnection其他执行其他操作。 在调用 的 SqlDataReader 方法之前Close就是这种情况。 例如,在调用 Close之前,无法检索输出参数。

读取数据时,另一进程或线程对结果集所做的更改可能对 SqlDataReader 的用户可见。 但是,确切的行为与时间有关。

IsClosedRecordsAffected 是在关闭 SqlDataReader 后可以调用的唯一属性。 RecordsAffected尽管 可以在 存在时SqlDataReader访问 属性,但始终在返回 值RecordsAffected之前调用 Close ,以确保返回值准确。

使用顺序访问 (CommandBehavior.SequentialAccess) 时, InvalidOperationException 如果 SqlDataReader 位置为高级,并且尝试对上一列执行另一个读取操作,则会引发 。

注意

为获得最佳性能, SqlDataReader 请避免创建不必要的对象或创建不必要的数据副本。 因此,对方法(如 ) GetValue 的多次调用将返回对同一对象的引用。 如果要修改等方法 GetValue返回的对象的基础值,请小心。

属性

Connection

获取与 SqlConnection 关联的 SqlDataReader

Depth

获取一个值,用于指示当前行的嵌套深度。

FieldCount

获取当前行中的列数。

HasRows

获取一个值,该值指示 SqlDataReader 是否包含一行还是多行。

IsClosed

检索一个布尔值,该值指示是否已关闭指定的 SqlDataReader 实例。

Item[Int32]

在给定列序号的情况下,获取指定列的以本机格式表示的值。

Item[String]

在给定列名称的情况下,获取指定列的以本机格式表示的值。

RecordsAffected

获取执行 Transact-SQL 语句所更改、插入或删除的行数。

VisibleFieldCount

获取 SqlDataReader 中未隐藏的字段的数目。

方法

Close()

关闭 SqlDataReader 对象。

Close()

关闭 DbDataReader 对象。

(继承自 DbDataReader)
CloseAsync()

异步关闭 DbDataReader 对象。

(继承自 DbDataReader)
CreateObjRef(Type)

创建一个对象,该对象包含生成用于与远程对象进行通信的代理所需的全部相关信息。

(继承自 MarshalByRefObject)
Dispose()

释放 DbDataReader 类的当前实例所使用的所有资源。

(继承自 DbDataReader)
Dispose(Boolean)

释放由 DbDataReader 占用的非托管资源,还可以另外再释放托管资源。

(继承自 DbDataReader)
DisposeAsync()

异步释放 DbDataReader 类的当前实例所使用的所有资源。

(继承自 DbDataReader)
Equals(Object)

确定指定对象是否等于当前对象。

(继承自 Object)
GetBoolean(Int32)

获取指定列的布尔值形式的值。

GetByte(Int32)

以字节的形式获取指定列的值。

GetBytes(Int32, Int64, Byte[], Int32, Int32)

从给定的缓冲区偏移量开始,按指定的列偏移量将字节流作为数组读入缓冲区。

GetChar(Int32)

作为单个字符获取指定列的值。

GetChars(Int32, Int64, Char[], Int32, Int32)

从给定的缓冲区偏移量开始,按指定的列偏移量将字符流作为数组读入缓冲区。

GetColumnSchema()

获取只读列架构集合。

GetColumnSchemaAsync(CancellationToken)

这是 GetColumnSchema(DbDataReader) 的异步版本。 提供程序应使用合适的实现进行重写。 可以选择接受 cancellationToken。 默认实现调用同步 GetColumnSchema(DbDataReader) 调用并返回已完成任务。 如果传递到已取消 cancellationToken,则默认实现将返回已取消的任务。 GetColumnSchema(DbDataReader) 引发的异常将通过任务异常属性传递。

(继承自 DbDataReader)
GetData(Int32)

返回指定列序号的 IDataReader

GetData(Int32)

返回所请求列的嵌套数据读取器。

(继承自 DbDataReader)
GetDataTypeName(Int32)

获取一个表示指定列的数据类型的字符串。

GetDateTime(Int32)

DateTime 对象的形式获取指定列的值。

GetDateTimeOffset(Int32)

检索指定列的 DateTimeOffset 对象形式的值。

GetDbDataReader(Int32)

返回被请求的列序号的 DbDataReader 对象,可以使用提供程序特定的实现对该对象进行重写。

(继承自 DbDataReader)
GetDecimal(Int32)

Decimal 对象的形式获取指定列的值。

GetDouble(Int32)

获取作为双精度浮点数的指定列的值。

GetEnumerator()

返回循环访问 IEnumeratorSqlDataReader

GetFieldType(Int32)

获取作为对象的数据类型的 Type

GetFieldValue<T>(Int32)

同步获取作为类型的指定列的值。 GetFieldValueAsync<T>(Int32, CancellationToken) 是此方法的异步版本。

GetFieldValue<T>(Int32)

获取指定列的值作为请求的类型。

(继承自 DbDataReader)
GetFieldValueAsync<T>(Int32)

异步获取指定列的值作为请求的类型。

(继承自 DbDataReader)
GetFieldValueAsync<T>(Int32, CancellationToken)

异步获取作为类型的指定列的值。 GetFieldValue<T>(Int32)是此方法的同步版本。

GetFieldValueAsync<T>(Int32, CancellationToken)

异步获取指定列的值作为请求的类型。

(继承自 DbDataReader)
GetFloat(Int32)

以单精度浮点数字的形式获取指定列的值。

GetGuid(Int32)

作为全局唯一标识符 (GUID) 获取指定列的值。

GetHashCode()

作为默认哈希函数。

(继承自 Object)
GetInt16(Int32)

获取指定列的 16 位有符号整数形式的值。

GetInt32(Int32)

获取指定列的 32 位带符号整数形式的值。

GetInt64(Int32)

以 64 位有符号整数的形式获取指定列的值。

GetLifetimeService()
已过时。

检索控制此实例的生存期策略的当前生存期服务对象。

(继承自 MarshalByRefObject)
GetName(Int32)

获取指定列的名称。

GetOrdinal(String)

在给定列名时获取相应的列序号。

GetProviderSpecificFieldType(Int32)

获取一个 Object,它表示基础提供程序特定的字段类型。

GetProviderSpecificValue(Int32)

获取一个表示基础提供程序特定值的 Object

GetProviderSpecificValues(Object[])

获取表示基础提供程序特定值的对象的数组。

GetSchemaTable()

返回一个 DataTable,它描述 SqlDataReader 的列元数据。

GetSchemaTable()

返回一个 DataTable,它描述 DbDataReader 的列元数据。 若执行的命令未返回结果集或者 NextResult() 返回 false,则返回 null

(继承自 DbDataReader)
GetSchemaTableAsync(CancellationToken)

这是 GetSchemaTable() 的异步版本。 提供程序应使用合适的实现进行重写。 可以选择接受 cancellationToken。 默认实现调用同步 GetSchemaTable() 调用并返回已完成任务。 如果传递到已取消 cancellationToken,则默认实现将返回已取消的任务。 GetSchemaTable() 引发的异常将通过任务异常属性传递。

(继承自 DbDataReader)
GetSqlBinary(Int32)

获取指定列的 SqlBinary 形式的值。

GetSqlBoolean(Int32)

获取指定列的 SqlBoolean 形式的值。

GetSqlByte(Int32)

获取指定列的 SqlByte 形式的值。

GetSqlBytes(Int32)

获取指定列的 SqlBytes 形式的值。

GetSqlChars(Int32)

获取指定列的 SqlChars 形式的值。

GetSqlDateTime(Int32)

获取指定列的 SqlDateTime 形式的值。

GetSqlDecimal(Int32)

获取指定列的 SqlDecimal 形式的值。

GetSqlDouble(Int32)

获取指定列的 SqlDouble 形式的值。

GetSqlGuid(Int32)

获取指定列的 SqlGuid 形式的值。

GetSqlInt16(Int32)

获取指定列的 SqlInt16 形式的值。

GetSqlInt32(Int32)

获取指定列的 SqlInt32 形式的值。

GetSqlInt64(Int32)

获取指定列的 SqlInt64 形式的值。

GetSqlMoney(Int32)

获取指定列的 SqlMoney 形式的值。

GetSqlSingle(Int32)

获取指定列的 SqlSingle 形式的值。

GetSqlString(Int32)

获取指定列的 SqlString 形式的值。

GetSqlValue(Int32)

返回指定列中 SQL Server 类型的数据值。

GetSqlValues(Object[])

填充包含记录中所有列的值的 Object 数组,这些值表示为 SQL Server 类型。

GetSqlXml(Int32)

获取指定列的 XML 值形式的值。

GetStream(Int32)

检索作为 Stream 的二进制、图像、varbinary、UDT 和变量数据类型。

GetStream(Int32)

获取从指定列检索数据的流。

(继承自 DbDataReader)
GetString(Int32)

获取指定列的字符串形式的值。

GetTextReader(Int32)

检索作为 TextReader 的 Char、 NChar、 NText、 NVarChar、 text、 varChar 和 Variant data types。

GetTextReader(Int32)

获取文本读取器以从列中检索数据。

(继承自 DbDataReader)
GetTimeSpan(Int32)

检索指定列的 TimeSpan 对象形式的值。

GetType()

获取当前实例的 Type

(继承自 Object)
GetValue(Int32)

获取指定列以本机格式表示的值。

GetValues(Object[])

使用当前行的列值来填充对象数组。

GetXmlReader(Int32)

检索作为 XmlReader 的类型 XML 数据。

InitializeLifetimeService()
已过时。

获取生存期服务对象来控制此实例的生存期策略。

(继承自 MarshalByRefObject)
IsCommandBehavior(CommandBehavior)

确定指定的 CommandBehavior 是否与 SqlDataReader 的对应项匹配。

IsDBNull(Int32)

获取一个值,该值指示列中是否包含不存在的或缺少的值。

IsDBNullAsync(Int32)

异步获取一个值,该值指示列中是否包含不存在的或缺少的值。

(继承自 DbDataReader)
IsDBNullAsync(Int32, CancellationToken)

IsDBNull(Int32) 的异步版本,其获取指示列是否包含不存在或缺失值的值。

取消标记可用于在命令超时超过前请求放弃操作。 将通过返回的任务对象报告异常。

IsDBNullAsync(Int32, CancellationToken)

异步获取一个值,该值指示列中是否包含不存在的或缺少的值。

(继承自 DbDataReader)
MemberwiseClone()

创建当前 Object 的浅表副本。

(继承自 Object)
MemberwiseClone(Boolean)

创建当前 MarshalByRefObject 对象的浅表副本。

(继承自 MarshalByRefObject)
NextResult()

当读取批处理 Transact-SQL 语句的结果时,使数据读取器前进到下一个结果。

NextResultAsync()

在读取一批语句的结果时,使读取器异步前进到下一个结果。

(继承自 DbDataReader)
NextResultAsync(CancellationToken)

NextResult()异步版本,在读取批处理 Transact-SQL 语句的结果时,会将数据读取器推进到下一个结果。

取消标记可用于在命令超时超过前请求放弃操作。 将通过返回的任务对象报告异常。

NextResultAsync(CancellationToken)

在读取一批语句的结果时,使读取器异步前进到下一个结果。

(继承自 DbDataReader)
Read()

SqlDataReader 前进到下一条记录。

ReadAsync()

使读取器异步前进到结果集中的下一条记录。

(继承自 DbDataReader)
ReadAsync(CancellationToken)

Read() 的异步版本,将 SqlDataReader 前移到下一条记录。

取消标记可用于在命令超时超过前请求放弃操作。 将通过返回的任务对象报告异常。

ReadAsync(CancellationToken)

使读取器异步前进到结果集中的下一条记录。

(继承自 DbDataReader)
ToString()

返回表示当前对象的字符串。

(继承自 Object)

显式接口实现

IDataReader.Close()

有关此成员的说明,请参见 Close()

(继承自 DbDataReader)
IDataReader.GetSchemaTable()

有关此成员的说明,请参见 GetSchemaTable()

(继承自 DbDataReader)
IDataRecord.GetData(Int32)

返回指定列序号的 IDataReader

IDataRecord.GetData(Int32)

有关此成员的说明,请参见 GetData(Int32)

(继承自 DbDataReader)
IDisposable.Dispose()

释放数据读取器使用的所有资源。

IEnumerable.GetEnumerator()

返回一个可用于循环访问项集合的枚举数。

扩展方法

CanGetColumnSchema(DbDataReader)

获取一个值,指示 DbDataReader 是否可以获取列架构。

GetColumnSchema(DbDataReader)

获取 DbDataReader 的列架构(DbColumn 集合)。

Cast<TResult>(IEnumerable)

IEnumerable 的元素强制转换为指定的类型。

OfType<TResult>(IEnumerable)

根据指定类型筛选 IEnumerable 的元素。

AsParallel(IEnumerable)

启用查询的并行化。

AsQueryable(IEnumerable)

IEnumerable 转换为 IQueryable

适用于

另请参阅