SqlDataReader 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
提供一种从 SQL Server 数据库中读取只进的行流的方式。 此类不能被继承。
public ref class SqlDataReader : System::Data::Common::DbDataReader, IDisposable
public ref class SqlDataReader sealed : MarshalByRefObject, IDisposable, System::Collections::IEnumerable, System::Data::IDataReader
public ref class SqlDataReader : System::Data::Common::DbDataReader, System::Data::Common::IDbColumnSchemaGenerator
public class SqlDataReader : System.Data.Common.DbDataReader, IDisposable
public sealed class SqlDataReader : MarshalByRefObject, IDisposable, System.Collections.IEnumerable, System.Data.IDataReader
public class SqlDataReader : System.Data.Common.DbDataReader, System.Data.Common.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
type SqlDataReader = class
inherit DbDataReader
interface IDataReader
interface IDataRecord
interface IDisposable
interface IDbColumnSchemaGenerator
Public Class SqlDataReader
Inherits DbDataReader
Implements IDisposable
Public NotInheritable Class SqlDataReader
Inherits MarshalByRefObject
Implements IDataReader, IDisposable, IEnumerable
Public Class SqlDataReader
Inherits DbDataReader
Implements IDbColumnSchemaGenerator
- 继承
- 继承
- 继承
- 实现
示例
以下示例创建 SqlConnection、 SqlCommand、 和 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
的用户可见。 但是,确切的行为与时间有关。
IsClosed 和 RecordsAffected 是在关闭 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 中未隐藏的字段的数目。 |
方法
显式接口实现
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。 |