编程论坛
400万+工程师在用
400万+工程师在用

电子发烧友网工程师

17年用户 16436经验值
擅长:可编程逻辑 MEMS/传感技术 测量仪表 模拟技术 控制/MCU RF/无线
私信 关注

ASP.NET数据库编程

2009-1-8 09:00

<p><font face="Verdana">ASP.NET数据库编程</font><br/></p>
<p><font face="Verdana"><font face="Verdana">ASP.NET中的ADO.NET和ASP中的ADO相对应,它是ADO的改进版本。在ADO.NET中,通过Managed Provider所提供的应用程序编程接口(API),可以轻松地访问各种数据源的数据,包括OLEDB所支持的和ODBC支持的数据库。下面介绍ADO.NET中最重要的两个概念:Managed Provider和DataSet。Managed Provider 过去,通过ADO的数据存取采用了两层的基于连接的编程模型。随着多层应用的需求不断增加,程序员需要一个无连接的模型。ADO.NET就应运而生了。ADO.NET的Managed Provider就是一个多层结构的无连接的一致的编程模型。 Managed Provider提供了DataSet和数据中心(如MS SQL)之间的联系。Managed Provider包含了存取数据中心(数据库)的一系列接口。主要有三个部件: 1、连接对象Connection、命令对象Command、参数对象Parameter提供了数据源和DataSet之间的接口。DataSetCommand接口定义了数据列和表映射,并最终取回一个DataSet。 2、数据流提供了高性能的、前向的数据存取机制。通过IdataReader,你可以轻松而高效地访问数据流。 3、更底层的对象允许你连接到数据库,然后执行数据库系统一级的特定命令。过去,数据处理主要依赖于两层结构,并且是基于连接的。连接断开,数据就不能再存取。现在,数据处理被延伸到三层以上的结构,相应地,程序员需要切换到无连接的应用模型。这样,DataSetCommand就在ADO.NET中扮演了极其重要的角色。它可以取回一个DataSet,并维护一个数据源和DataSet之间的"桥",以便于数据访问和修改、保存。DataSetCommand自动将数据的各种操作变换到数据源相关的合适的SQL语句。从图上可以看出,四个Command对象:SelectCommand、<br/>InsertCommand、UpdateCommand、DeleteCommand分别代替了数据库的查询、插入、更新、删除操作。 Managed Provider利用本地的OLEDB通过COM Interop来实现数据存取。OLEDB支持自动的和手动的事务处理。所以,Managed Provider也提供了事务处理的能力。DataSet DataSet是ADO.NET的中心概念。你可以把DataSet想象成内存中的数据库。正是由于DataSet,才使得程序员在编程序时可以屏蔽数据库之间的差异,从而获得一致的编程模型。 DataSet支持多表、表间关系、数据约束等等。这些和关系数据库的模型基本一致。<br/>通过ADO.NET访问数据库不论从语法来看,还是从风格和设计目标来看,ADO.NET都和ADO有显著的不同。在ASP中通过ADO访问数据库,一般要通过以下四个步骤: 1、创建一个到数据库的链路,即ADO.Connection; 2、查询一个数据集合,即执行SQL,产生一个Recordset; 3、对数据集合进行需要的操作; 4、关闭数据链路。 在ADO.NET里,这些步骤有很大的变化。ADO.NET的最重要概念之一是DataSet。DataSet是不依赖于数据库的独立数据集合。所谓独立,就是:即使断开数据链路,或者关闭数据库,DataSet依然是可用的。如果你在ASP里面使用过非连接记录集合(Connectionless Recordset),那么DataSet就是这种技术的最彻底的替代品。有了DataSet,那么,ADO.NET访问数据库的步骤就相应地改变了: 1、创建一个数据库链路; 2、请求一个记录集合; 3、把记录集合暂存到DataSet; 4、如果需要,返回第2步;(DataSet可以容纳多个数据集合) 5、关闭数据库链路; 6、在DataSet上作所需要的操作。 DataSet在内部是用XML来描述数据的。由于XML是一种平台无关、语言无关的数据描述语言,而且可以描述复杂数据关系的数据,比如父子关系的数据,所以DataSet实际上可以容纳具有复杂关系的数据,而且不再依赖于数据库链路。 ADO.NET有许多对象,我们先看看最基本的也最常用的几个。首先看看ADOConnection。和ADO的ADODB.Connection对象相对应,ADOConnection维护一个到数据库的链路。为了使用ADO.NET对象,我们需要引入两个NameSpace:System.Data和System.Data.ADO,使用ASP.NET的Import指令就可以了: <%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.ADO" %> 和ADO的Connection对象类似,ADOConnection对象也有Open和Close两个方法。下面的这个例子展示了如何连接到本地的MS SQL Server上的Pubs数据库。<%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.ADO" %> <% '设置连接串... Dim strConnString as String strC &amp; _<br/>"Initial Catalog=pubs; User ID=sa" '创建对象ADOConnection Dim objConn as ADOConnection objConn = New ADOConnection '设置ADOCOnnection对象的连接串objConn.ConnectionString = strConnString objConn.Open() '打开数据链路'数据库操作代码省略objConn.Close() '关闭数据链路objConn = Nothing '清除对象%><br/>上面的代码和ADO没有什么太大的差别。应该提到的是,ADO.NET提供了两种数据库连接方式:ADO方式和SQL方式。这里我们是通过ADO方式连接到数据库。关于建立数据库连接的详细信息,我们在后面的篇幅中将会讲到。ADODatasetCommand 另一个不得不提到的ADO.NET对象是ADODatasetCommand,这个对象专门负责创建我们前面提到的DataSet对象。另一个重要的ADO.NET对象是Dataview,它是DataSet的一个视图。还记得DataSet可以容纳各种各种关系的复杂数据吗?通过Dataview,我们可以把DataSet的数据限制到某个特定的范围。下面的代码展示了如何利用ADODatasetCommand为DataSet填充数据: '创建SQL字符串Dim strSQL as String = "SELECT * FROM authors" '创建对象ADODatasetCommand 和Dataset Dim objDSCommand as ADODatasetCommand Dim objDataset as Dataset = New Dataset objDSCommand = New ADODatasetCommand(strSQL, objConn) '填充数据到Dataset '并将数据集合命名为 "Author Information" objDSCommand.FillDataSet(objDataset, "Author Information")<br/>显示Dataset 前面我们已经把数据准备好。下面我们来看看如何显示Dataset中的数据。在ASP.NET中,显示DataSet的常用控件是DataGrid,它是ASP.NET中的一个HTML控件,可以很好地表现为一个表格,表格的外观可以任意控制,甚至可以分页显示。这里我们只需要简单地使用它: <asp:DataGrid id="DataGridName" runat="server"/><br/>剩下的任务就是把Dataset绑定到这个DataGrid,绑定是ASP.NET的重要概念,我们将另文讲解。一般来说,你需要把一个Dataview绑定到DataGrid,而不是直接绑定Dataset。好在Dataset有一个缺省的Dataview,下面我们就把它和DataGrid绑定:<br/>MyFirstDataGrid.DataSource = _ objDataset.Tables("Author Information").DefaultView MyFirstDataGrid.DataBind()<br/>Dataset的用法 Dataset 并不是Recordset的简单翻版。从一定的意义上来说,DataView更类似于Recordset。如果说DataReader是访问数据的最容易的方式,那么Dataset则是最完整的数据访问对象。通过Dataset,你可以操作已有的数据,还可以通过程序创建Dataset,加入Table到Dataset,并建立这些Table之间的关系。使用Dataset的几个步骤第1步,创建到数据源的连接: SQLConnection con =new SQLConnection("server=localhost;uid=sa;pwd=;database=pubs"); 第2步,创建DataSetCommand对象,指定一个存储过程的名字或者一个SQL语句,指定数据链路; SQLDataSetCommand cmd =new SQLDataSetCommand("SELECT * FROM Authors", con); 第3步,创建一个Dataset对象 DataSet ds = new DataSet(); 第4步,调用DataSetCommand的FillData方法,为Dataset填充数据。注意:数据链路没有必要是打开的。如果数据链路是关闭状态,FillData函数会打开它,并在FillData之后关闭数据链路。如果数据链路本来就是打开的,在FillData之后,数据链路依然保持打开状态。 int iRowCount = cmd.FillDataSet(ds, "Authors"); 第5步,操作数据。由于FillData返回了记录的个数,我们可以构造一个循环,来操纵Dataset中的数据。<br/>for(int i=0; i< iRowCount; i++){ DataRow dr = ds.Tables[0].Rows; Console.WriteLine(dr["au_lname"]); }<br/>数据绑定技术 repeater、DataList 、DataGrid控件是System.Web.UI.WebControls名空间(Namespace)里几个相关的页面组件。这些控件把绑定到它们的数据通过HTML表现出来,它们又被成为"列表绑定控件"(list-bound controls)。和其他Web组件一样,这些组件不仅提供了一个一致的编程模型,而且封装了与浏览器版本相关的HTML逻辑。这种特点使得程序员可以针对这个对象模型编程,而无须考虑各种浏览器版本的差别和不一致性。这三个控件具有把它们的相关数据"翻译"成各种外观的能力。这些外观包括表格、多列列表、或者任何的HTML流。同时,它们也允许你创建任意的显示效果。除此之外,它们还封装了处理提交数据、状态管理、事件激发的功能。最后,它们还提供了各种级别的标准操作,包括选择、编辑、分页、排序等等。利用这些控件,你可以轻松地完成如下的Web应用:报表、购物推车、产品列表、查询结果显示、导航菜单等等。</font></font></p>

更多回帖

打开APP