连接模式数据访问

连接模式数据访问

ADO.NET Framework中提供了大量的类,但其核心事实上是由以下三个类组成的。

Connection--用于表示数据源的连接。

Command--用于执行应用于数据源的命令。

DataReader--用于表示从数据源获取的数据。

ADO.NET Framework中的其他大多数类都是由这三个类构建而来。这三个类提供了访问数据库数据最基本的方法,可以用它们来连接数据库、执行数据库命令,并表示从数据库返回的结果数据。

现在应该明白这三个类的重要性了,但事实上这三个类是不存在的。ADO.NET使用接口提供(Provider)模型,因此它实际上使用了多组不同的ADO.NET数据访问类来与不同的数据源进行通信。

例如,实际上在前面提到的Connection类并不存在。相反地,实际上真正存在的是SqlConnection类、OracleConnection类、OleDbConnection类和ODBCConnection类。这些不同的类分别用来连接不同的数据源。

Connection、Command和DataReader类的不同实现被组织在下面的命名空间中。

System.Data.SqlClient--包含用于连接微软SQL Server 7.0或更高版本数据库的ADO .NET类。

System.Data.OleDb--包含用于连接OLEDB接口数据源的ADO.NET类。

System.Data.OracleClient--包含用于连接Oracle数据库(需要Oracle 8i R3 [8.1.7]客户端或更高版本)的ADO.NET类。

System.Data.SqlServerCe--包含用于连接微软SQL Server数据库Mobile版的ADO.NET类。

如果连接到微软SQL Server 7.0或更高版本的数据库,就应该尽量使用来自SqlClient命名空间的类。这些类会提供最佳的访问性能,因为它们直接连接SQL Server数据库的表格化数据流(Tabular Data Stream, TDS)层(TDS是微软SQL Server数据库用来与应用程序进行通信的底层协议)。

当然,大家使用的并不是只有微软SQL Server一种数据库。如果要与Oracle数据库通信,就应该使用来自OracleClient命名空间的类。如果还要与其他类型的数据库进行通信,就应该使用来自OleDb或Odbc命名空间的类。几乎所有数据库都配备了OLEDB提供程序和ODBC数据驱动接口。

由于ADO.NET遵循接口提供(Provider)模型,所以所有Connection、Command和DataReader的实现都继承自其对应的基类。这些基类分别是如下三种。

DbConnection--所有Connection类的基类。

DbCommand--所有Command类的基类。

DbDataReader--所有DataReader类的基类。

这些基类都包含在命名空间System.Data.Common中。

本章中所有的示例代码都假定工作在微软SQL Server数据库上,因此所有示例代码中使用的类都来自SqlClient命名空间。同时,由于ADO.NET使用接口提供模型,因此在其他数据库中使用的数据访问方法和本章所介绍的方法非常类似。

注解 要在组件和页面中使用SqlClient命名空间提供的类之前,需要首先导入System.Data. SqlClient命名空间。

在详细讨论Connection、Command和DataReader类之前,让我们来看看如何使用这些类来构建简单的数据访问组件。代码清单17-1中的组件名为Movie1,包含一个从数据库表Movies中返回所有记录的方法GetAll()。

代码清单17-1  App_Code/Movie1.cs

using System;
using System.Data;
using System.Data.SqlClient;
using System.Web.Configuration;
using System.Collections.Generic;
public class Movie1
{
private static readonly string _connectionString;
    private string _title;
private string _director;
    public string Title
{
get { return _title; }
set { _title = value; }
}
    public string Director
{
get { return _director; }
set { _director = value; }
}
    public List<Movie1> GetAll()
{
List<Movie1> results = new List<Movie1>();
SqlConnection con = new SqlConnection(_connectionString);
SqlCommand cmd = new SqlCommand("SELECT
Title,Director FROM Movies", con);
using (con)
{
con.Open();
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
Movie1 newMovie = new Movie1();
newMovie.Title = (string)reader["Title"];
newMovie.Director = (string)reader["Director"];
results.Add(newMovie);
}
}
return results;
}
    static Movie1()
{
_connectionString = WebConfigurationManager.
ConnectionStrings["Movies"].ConnectionString;
}
}

代码清单17-1中,SqlConnection对象用来表示连到微软SQL Server数据库上的一个连接,SqlCommand对象用来表示一个SQL SELECT命令,而命令执行的结果表示为了一个SqlDataReader对象。

通过循环调用SqlDataReader.Read()方法,可以获得执行SELECT命令后所返回的每一行数据。当SELECT命令结果集中的最后一行数据被返回后,SqlDataReader.Read()方法返回false并应结束循环。

数据库中返回的所有数据行被添加到了一个列表(List)集合中。Movie1类的一个实例用来表示所有查询记录。

代码清单17-2中的页面将使用GridView和ObjectDataSource控件来显示数据访问组件Movie1所返回的电影信息记录(见图17-1)。

代码清单17-2  ShowMovie1.aspx

<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>Show Movie1</title>
</head>
<body>
<form id="form1" runat="server">
<div>

<asp:GridView
id="grdMovies"
DataSourceID="srcMovies"
Runat="server" />

<asp:ObjectDataSource
id="srcMovies"
TypeName="Movie1"
SelectMethod="GetAll"
Runat="server" />

</div>
</form>
</body>
</html>
 
(点击查看大图)图17-1  显示电影信息记录

 

【责任编辑: 云霞 TEL:(010)68476606】
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值