日期:2010-04-25 浏览次数:20450 次
服务器端数据介绍
数据访问是现实世界中应用程序的核心内容。Asp.net提供了一套丰富的控件,他与CLR(通用语言运行库)提供的用来管理数据访问的APIs(应用程序接口)紧密结合。本章预排几个反复使用asp.net的DateGrid控件来绑定SQL查询结果和XML数据文件的例子。本章假定学习者熟悉数据库基础和SQL查询语言。
Wincheer注:预排(walk through)这个词不知道该怎样准确翻译,他的意思是在计算机程序设计中,在一个小组内进行有组织的讨论,以便对计算机程序的逻辑进行跟踪检查的一个过程。
服务器端数据访问比较独特,其原因在于web页面是无态的。这就导致在试图执行事务,如插入或者更新记录的时候,出现了一些有难度的挑战。正如你将在本章看到的,DataGrid控件能够帮助管理这些挑战,允许你浓缩更多的应用程序逻辑,并且减少事件处理和状态管理的细节。
Connections(连接)、Commands(命令)、和Datasets(数据集)
通用语言运行时刻(CLR)提供了一整套管理数据访问的APIs,用来增强数据应用程序开发环境。这些应用程序接口用一致的方式来取得和填充数据,而不管实际的数据源是什么(SQL Server, OLEDB, XML,等等)最常用的三个对象是connections, commands, 和 datasets.
Connection 表示到数据存储的物理连接,例如连接SQL Server 或者 XML文件。
Command 表示取得(select)或者操作(insert, update, delete)数据存储的命令。
Dataset 表示应用程序用以工作的实际数据。注意datasets 总是与他们的数据源连接和数据模型分离,并且可以被独立修改。 不过,对dataset进行修改,可以很容易的与原始数据模型协调一致。
关于在通用语言运行时刻管理数据访问的更多细节问题,请参阅ADO.NET概述。
访问基于SQL的数据
应用程序常常需要对SQL数据库执行一个或多个select, insert, update, 或者delete 语句。下面的表格展示了一些实现这些功能的示例代码。
以下为引用的内容: 功能 举例 ------------------------------------------------------------------ 简单查询 | SELECT * from Employees WHERE FirstName = 'Bradley'; ------------------------------------------------------------------ 联合查询 | SELECT * from Employees E, Managers M WHERE E.FirstName = M.FirstName; ------------------------------------------------------------------ 插入 | INSERT into Employees VALUES ('123-45-6789','Bradley','Millington','Program Manager'); ------------------------------------------------------------------ 更新 | UPDATE Employees SET Title = 'Development Lead' WHERE FirstName = 'Bradley'; ------------------------------------------------------------------ 删除 | DELETE from Employees WHERE Productivity < 10; ------------------------------------------------------------------ |
要想让你的页面能够访问SQL数据库,必须在页面中引入System.Data 和 System.Data.SqlClient名称空间:
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
为了从SQL数据库执行select查询,你需要通过连接字符串建立一个连接到数据库的SqlConnection对象, 然后构造一个包含查询语句的SqlDataAdapter对象。为了用查询的返回结果填充到DataSet 对象,需要调用SqlDataAdapter的Fill方法。
以下为引用的内容: SqlConnection myConnection = new SqlConnection("server=(local)\NetSDK;database=pubs;Trusted_Connection=yes"); SqlDataAdapter myCommand = new SqlDataAdapter("select * from Authors", myConnection); DataSet ds = new DataSet(); myCommand.Fill(ds, "Authors"); |
正如本章前面提到的那样,使用dataset的好处在于提供了一个分离的数据库视图。你可以在应用程序中操作dataset,然后将你的修改与实际的数据库一致。对于长时间运行的应用程序来说,由于避免了频繁的读取数据源,因而是最好的处理办法。对于web应用程序来说,往往使用简短的操作(通常只是简单的显示数据)来处理客户端的请求。在这种情况下,我们就可以使用SqlDataReader来代替DataSet对象。
SqlDataReader对象提供了一种从sql数据库取得数据时,只向前,只读的指针。由于SqlDataReader对象使用表格式数据流(TDS)直接从数据库连接读取数据,所以,在允许使用的情况下,他的执行效率高于DataSet。
使用SqlDataReader对象的时候,需要使用SqlCommand来代替SqlDataAdapter。SqlCommand 使用 ExecuteReader 方法得到SqlDataReader对象。注意在使用SqlCommand的时候,必须显式地打开和关闭SqlConnection。调用ExecuteReader方法之后,SqlDataReader对象就可以作为数据源绑定到ASP.NET服务器控件了。下一个小节将会演示这种情况。