.NET中的DataReader简介


** 摘要 ** ** **

本文介绍了 ADO.NET 中的一个重要的对象 DataReader ,简单的举例说明了 DataReader 的使用方法。

** 目录 ** ** **

1. ADO.NET 概览

2. DataReader 的使用方法

3. 小结

** 1. ADO.NET ** ** 概览 ** ** **

在说明主题之前,简单的介绍一下 ADO.NET 。 ADO.NET 有两个核心组件: DataSet 和 .NET data provider , .NET data provider 被用来连接数据库,执行 SQL 命令以及检索数据集。

.NET Framework 包括 SQL Server .NET Data Provider (面向 Microsoft SQL Server 7.0 及以后版本)和 OLE DB .NET Data Provider , SQL Server .NET Data Provider 在连接和处理 SQL Server 数据库时是最高效的,因为它使用了特别针对 SQL Server 的协议和优化处理,在 System.Data.Sqlclient 名称空间中包含了所有的 SQL Server .NET Data Provider 类 。 OLE DB .NET Data Provider 用来支持 OLE DB 接口。 ADO.NET 可以提供以下 OLE DB Providers : SQLOLEDB - Microsoft OLE DB Provider for SQL Server ; MSDAORA - Microsoft OLE DB Provider for Oracle ; Microsoft.Jet.OLEDB.4.0 - OLE DB Provider for Microsoft Jet 。 System.Data.Oledbclient 名称空间包含了所有的 OLE DB .NET Data Provider 类 。因此在程序中要包含你想要的 Data Provider 的名称空间。

** 使用 ** ** SQL Server .NET Data Provider ** ** 时引入的代码: ** ** **

[Visual Basic]


Imports System.Data.SqlClient


[C#]


using System.Data.SqlClient;

** 使用 ** ** OLE DB .NET Data Provider ** ** 时引入的代码: ** ** **

[Visual Basic]


Imports System.Data.OleDb


[C#]


using System.Data.OleDb;

.NET data provider 包含 4 个主要的对象: Connection 、 Command 、 DataReader 、 DataAdapter 。


** Connection ** 类用来建立数据库连接。

** 如果 ** ** Provider ** ** 是 ** ** SQL Server ** ** 的话就可以使用如下代码 ** ** **

[Visual Basic]

Dim adoConn As SqlConnection = New SqlConnection(" Data source=DBServer;initial catalog=Northwind;persist security info=True;user id=sa")

[C#]

SqlConnection adoConn = new SqlConnection("Data source=DBServer;initial catalog=Northwind;persist security info=True;user id=sa");

** 否则 ** ** Provider ** ** 是 ** ** OLE DB ** ** 的话就可以使用如下代码 ** ** **

[Visual Basic]

Dim adoConn As OleDbConnection = New OleDbConnection("Provider=SQLOLEDB;Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind")

[C#]

OleDbConnection adoConn = new OleDbConnection("Provider=SQLOLEDB;Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind ");

** Command ** 类用来执行 SQL 命令或存储过程。

** DataReader ** 类用来从数据库检索一种 只读的且指针只能前移的数据流 , 根据 .NET Data Provider 的不同, DataReader 分为 SqlDataReader Class 和 OleDbDataReader Class 两种。

** SqlDataReader **

[Visual Basic]

Dim sqlMyReader As SqlDataReader = cmdMyCommand.ExecuteReader()

[C#]

SqlDataReader sqlMyReader = cmdMyCommand.ExecuteReader();

** OleDbDataReader **

[Visual Basic]

Dim oleMyReader As OleDbDataReader = cmdMyCommand.ExecuteReader()

[C#]

OleDbDataReader oleMyReader = cmdMyCommand.ExecuteReader();


** DataAdapter ** 类用来填充 Dataset 和更新数据源 。

** 2. DataReader ** ** 的使用方法 ** ** **

DataReader 是我要着重描述的部分,因为使用 DataReader 可以提高应用程序的性能,是将数据输出到表示层重要的手段。以 DataReader 为主的数据访问关系可以用下图表示

在创建了一个 Command 对象之后,通过调用 Command.ExecuteReader 方法再创建 DataReader 对象,就能够使用 Read 方法从数据源检索记录集了。 最后,需要着重指出的是在使用完 DataReader 后应该显式的关闭 DataReader 对象。下面的代码是使用 SqlDataReader 的样例,从罗思文数据库中进行简单数据查询。

Imports System

Imports System.Data

Imports System.Data.SqlClient

Imports Microsoft.VisualBasic

Public Class DataReaderSample

Public Shared Sub Main()

Dim sqlConn As SqlConnection = New SqlConnection("data source=DBServer;initial catalog=Northwind;persist security info=True;user id=sa")

Dim sqlCmd As SqlCommand = sqlConn.CreateCommand()

sqlCmd.CommandText = "SELECT EmployeeID, LastName , FirstName FROM Employees"

sqlConn.Open()

Dim sqlReader As SqlDataReader = sqlCmd.ExecuteReader()

Dim intFor As Int32

For intFor = 0 To sqlReader.FieldCount - 1

Console.Write( String .Format("{0,-20:G}", sqlReader.GetName(intFor)))

Next

Console.WriteLine()

Do While sqlReader.Read()

Console.WriteLine( String .Format("{0,-20:G}{1,-20:G}{2,-20:G}", sqlReader.GetInt32(0), sqlReader.GetString(1), sqlReader.GetString(2)))

Loop

sqlReader.Close()

sqlConn.Close()

Console.Read()

End Sub

End Class

图表 1.SqlReader 执行的检索结果

同样的也可以让 Command 对象执行 SQL 批,从而检索多个记录集,此时调用 DataReader 的 NextResult 方法读取下一个 SQL 批产生的数据。

Imports System

Imports System.Data

Imports System.Data.SqlClient

Imports Microsoft.VisualBasic

Public Class DataReaderSample

Public Shared Sub Main()

Dim sqlConn As SqlConnection = New SqlConnection("data source= DBServer;initial catalog=Northwind;persist security info=True;user id=sa")

Dim sqlCmd As SqlCommand = sqlConn.CreateCommand()

sqlCmd.CommandText = "SELECT EmployeeID, LastName , FirstName FROM Employees;SELECT CategoryID, CategoryName, Description FROM Categories"

sqlConn.Open()

Dim sqlReader As SqlDataReader = sqlCmd.ExecuteReader()

Dim intFor As Int32

Dim blnNextResult As Boolean = False

Do While Not blnNextResult

For intFor = 0 To sqlReader.FieldCount - 1

Console.Write( String .Format("{0,-20:G}", sqlReader.GetName(intFor)))

Next

Console.WriteLine()

Do While sqlReader.Read()

Console.WriteLine( String .Format("{0,-20:G}{1,-20:G}{2,-20:G}", sqlReader.GetInt32(0), sqlReader.GetString(1), sqlReader.GetString(2)))<

Published At
Categories with Web编程
Tagged with
comments powered by Disqus