SqlDataReader 类

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

**命名空间:**System.Data.SqlClient
**程序集:**System.Data(在 system.data.dll 中)

语法

声明
Public Class SqlDataReader
    Inherits DbDataReader
    Implements IDataReader, IDisposable, IDataRecord
用法
Dim instance As SqlDataReader
public class SqlDataReader : DbDataReader, IDataReader, IDisposable, IDataRecord
public ref class SqlDataReader : public DbDataReader, IDataReader, IDisposable, IDataRecord
public class SqlDataReader extends DbDataReader implements IDataReader, IDisposable, 
    IDataRecord
public class SqlDataReader extends DbDataReader implements IDataReader, IDisposable, 
    IDataRecord

备注

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

在使用 SqlDataReader 时,关联的 SqlConnection 正忙于为 SqlDataReader 服务,对 SqlConnection 无法执行任何其他操作,只能将其关闭。除非调用 SqlDataReaderClose 方法,否则会一直处于此状态。例如,在调用 Close 之前,无法检索输出参数。

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

SqlDataReader 关闭后,只能调用 IsClosedRecordsAffected 属性。尽管当 SqlDataReader 存在时可以访问 RecordsAffected 属性,但是请始终在返回 RecordsAffected 的值之前调用 Close,以保证返回精确的值。

提示

为了获得最佳性能,SqlDataReader 会避免创建不必要的对象或复制不必要的数据。因此,对 GetValue 等方法的多次调用将返回对相同对象的引用。如果正在修改由 GetValue 等方法返回的对象的基础值,请使用警告。

示例

下面的示例创建一个 SqlConnection、一个 SqlCommand 和一个 SqlDataReader。该示例读取全部数据,并将这些数据写到控制台窗口。随后此代码关闭 SqlDataReaderSqlConnectionusing 代码块的结尾处自动关闭。

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()
            Console.WriteLine(String.Format("{0}, {1}", _
                reader(0), reader(1)))
        End While

        ' Call Close when done reading.
        reader.Close()
    End Using
End Sub
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())
        {
            Console.WriteLine(String.Format("{0}, {1}",
                reader[0], reader[1]));
        }

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

继承层次结构

System.Object
   System.MarshalByRefObject
     System.Data.Common.DbDataReader
      System.Data.SqlClient.SqlDataReader

线程安全

此类型的任何公共静态(Visual Basic 中的 Shared)成员都是线程安全的,但不保证所有实例成员都是线程安全的。

平台

Windows 98、Windows 2000 SP4、Windows CE、Windows Millennium Edition、Windows Mobile for Pocket PC、Windows Mobile for Smartphone、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition

.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求

版本信息

.NET Framework

受以下版本支持:2.0、1.1、1.0

.NET Compact Framework

受以下版本支持:2.0、1.0

请参见

参考

SqlDataReader 成员
System.Data.SqlClient 命名空间

其他资源

在 ADO.NET 中连接和检索数据
使用 SQL Server .NET Framework 数据提供程序