数据访问一直是开发 Web 应用程序的一个关键问题。现在,大多数复杂的应用程序都可以利用 ASP.NET 2.0 提供的数据访问工具。从体系结构和机制上限制 ASP.NET 1.x 执行的绑定和缓存问题,在 ASP.NET 2.0 中都得以解决了。
数据访问 API
第二个体系结构层提供使用提供程序、ADO.NET 和 ASP.NET 控件的通用机制。这个体系结构涉及一些通用任务和过程。然而,从开发人员的视角来看,使用 ASP.NET 2.0 提供的各种数据绑定控件和数据源控件无需编写代码来支持这些过程。
连接和命令ADO.NET 包含的 .NET Framework 数据提供程序用于连接一个数据库,执行命令和检索结果。在 ADO.NET 中,使用
Connection 对象连接一个指定的数据源。例如,在 SQL Server 2000 中,能够使用
SQLConnection 对象连接一个数据库,如以下代码所示。
[Visual Basic]
Dim nwindConn As SqlConnection = _ New SqlConnection(
"Data Source=localhost;Integrated Security=SSPI;" _ "Initial Catalog=northwind")
nwindConn.Open()
[C#]
SqlConnection nwindConn = new SqlConnection(
"Data Source=localhost; Integrated Security=SSPI;" "Initial Catalog=northwind");
nwindConn.Open(); |
连接到数据源后,能够使用
Command 对象执行命令和返回结果。Command 对象通过
Command 的构造函数创建,这个构造函数接收一个 SQL 语句或 SQL 查询。一旦创建了
Command,就能使用
CommandText 属性修改 SQL 语句。
Visual Basic] Dim catCMD As SqlCommand = _ New SqlCommand("SELECT CategoryID, CategoryName FROM Categories", nwindConn) [C#] SqlCommand catCMD = new SqlCommand("SELECT CategoryID, CategoryName FROM Categories", nwindConn);
您可将一条命令认为是等同于一个特定的 SQL 调用,该调用绑定到一个特定的数据库。一条命令只能用于
CommandText 字段中定义的特定调用。
Command 对象提供了一些不同的
Execute 方法来启动存储过程,执行查询或者执行非查询语句,例如更新或插入:
1.
|
ExecuteReader 方法 — 将数据作为一个 DataReader 对象返回。用于任何返回数据的 SQL 查询。
|
2.
|
ExecuteScalar 方法 — 返回单独值,例如与特定查询相匹配的记录数,或者数据库功能调用的结果。
|
3.
|
ExecuteNonQuery 方法 — 执行不返回任何行的命令。典型的例子是存储过程、插入和更新。
|
当然,您需要依据初始化
Command 对象时创建的命令来选择正确的
Execute 方法。
ExecuteReader 方法将任何结果都返回到
DataReader 对象。
DataReader 对象是查询数据库返回的一个关联的、只进的只读数据流。执行查询时,第一行返回到
DataReader 中。数据流保持到数据库的连接,然后返回下一条记录。
DataReader 从数据库中读取行数据时,每行的列值都被读取和计算,但是不能被编辑。
DataAdapter 和 DataSet虽然连接数据库的应用程序使用
DataReader 就已足够,但是,
DataReader 不能很好地支持数据库访问的断开连接模型。而
DataAdapter 和
DataSet 类则满足了这一需求。
DataSet 是 ADO.NET 断开连接体系结构中主要的数据存储工具。填充
DataSet 时,并非通过
Connection 对象将
DataSet 直接连接到数据库。您必须创建一个
DataAdapter 来填充
DataSet。
DataAdapter 连接数据库,执行查询并填充
DataSet。当
DataAdapter 调用
Fill 或
Update 方法时,在后台完成所有的数据传输。每个 .NET Framework 的数据提供程序都有一个
DataAdapter 对象。
一个
DataSet 代表一组完整的数据,包括表格、约束条件和表关系。
DataSet 能够存储代码创建的本地数据,也能存储来自多个数据源的数据,并断开到数据库的连接。
DataAdapter 能控制与现有数据源的交互。
DataAdapter 也能将对
DataSet 的变更传输回数据源中。下列代码说明使用
DataSet 典型情况。
[Visual Basic]
Dim nwindConn As SqlConnection = _ New SqlConnection(
"Data Source=localhost;" & _ "Integrated_Security=SSPI;Initial Catalog=northwind")
Dim selectCMD As SqlCommand = _ New SqlCommand(
"SELECT CustomerID, CompanyName FROM " & _ "Customers", nwindConn)
selectCMD.CommandTimeout = 30
Dim custDA As SqlDataAdapter= New SqlDataAdapter
custDA.SelectCommand= selectCMD
Dim custDS As DataSet= New DataSet
custDA.Fill(custDS, "Customers") nwindConn.Close()
[C#]
SqlConnection nwindConn = new SqlConnection(
"Data Source=localhost;" + "IntegratedSecurity=SSPI;Initial Catalog=northwind");
SqlCommand selectCMD = new SqlCommand(
"SELECT CustomerID, CompanyName FROM Customers", nwindConn);
selectCMD.CommandTimeout = 30;
SqlDataAdaptercustDA = new SqlDataAdapter();
custDA.SelectCommand= selectCMD;
nwindConn.Open();
DataSetcustDS = new DataSet();
custDA.Fill(custDS, "Customers");
nwindConn.Close(); |