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 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
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 IDisposable
Public NotInheritable Class SqlDataReader
Inherits MarshalByRefObject
Implements IDataReader, IDisposable, IEnumerable
- 继承
- 继承
- 继承
- 实现
示例
以下示例创建一个 SqlConnection、一个 SqlCommand和一个 SqlDataReader。 该示例读取数据,并将其写出到控制台窗口。 然后,代码关闭 .SqlDataReader 代码 SqlConnection 块末尾 using 自动关闭。
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]));
}
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
注解
若要创建, 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() |
返回可用于循环访问项集合的枚举器。 |
扩展方法
| 名称 | 说明 |
|---|---|
| AsParallel(IEnumerable) |
启用查询的并行化。 |
| AsQueryable(IEnumerable) |
将 IEnumerable 转换为 IQueryable。 |
| CanGetColumnSchema(DbDataReader) |
获取一个值,该值指示是否可以 DbDataReader 获取列架构。 |
| Cast<TResult>(IEnumerable) |
将 IEnumerable 的元素强制转换为指定类型。 |
| GetColumnSchema(DbDataReader) |
获取 .DbDataReader. 的列架构 (DbColumn集合) |
| OfType<TResult>(IEnumerable) |
根据指定类型筛选 IEnumerable 的元素。 |