分享
 
 
 

ASP.NET:ADO.NET的DataSet数据模型

王朝asp·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

DataSet对象是ADO.NET的核心,基于DataSet的数据模型才使得ADO.NET实现离线式数据操作模型。DataSet是存在于内存中的数据库,是专门用来处理数据保存体中读出的数据。它的优点就是离线式的,一点读取到数据源中的数据后,就在内存中建立数据库的副本,在此之后的操作,直到执行更新命令为止,所有的操作都是在内存中完成的。不管底层的数据库是哪种形式,DataSet的行为都是一致。

8.1.2ADO.NET的DataSet数据模型

因为DataSet可以看做是内存中的数据库,也因此可以说DataSet是数据表的集合,它可以包含任意多个数据表(DataTable),而且每一DataSet中的数据表(DataTable对应一个数据源中的数据表(Table)或是数据视图(View)。数据表实质是又行(DataRow)和列(DataColumn)组成的集合为了保护内存中数据记录的正确性,避免并发访问时的读写冲突,DataSet对象中的DataTable负着维护每一条记录,分别保存记录的初始状态和当前状态。从这里可以看出DataSet是与只能存放单张数据表的Recordset是截然不同的概念。

DataSet对象的结构模型如下图8.1所示:

通过上图的分析可知,DataSet对象结构还是非常复杂的,在DataSet对象的下一层中是DataTableCollection对象、DataRelationCollection对象和ExtendedProperties对象。上文已经说过,每一个DataSet对象是由若干个DataTable对象组成。DataTableCollection就是管理DataSet中的所有DataTable对象。表示DataSet中两个DataTable对象之间的父/子关系是DataRelation对象。它使一个DataTable 中的行与另一个DataTable中的行相关联。这种关联类似于关系数据库中数据表之间的主键列和外键列之间的关联。DataRelationCollection对象就是管理DataSet中所有DataTable之间的DataRelation关系的。在DataSet中DataSet、DataTable和DataColumn都具有ExtendedProperties属性。ExtendedProperties其实是一个属性集(PropertyCollection),用以存放各种自定义数据,如生成数据集的SELECT语句等。

通过上面几节中的介绍和本节中的分析,我们可以总结出DataSet对象的三大特性:

(1) 独立性。DataSet独立于各种数据源。

(2) 离线(断开)和连接。

(3) DataSet对象是一个可以用XML形式表示的数据视图,是一种数据关系视图。

在实际应用中,DataSet使用方法一般有三种:

(1) 把数据库中的数据通过DataAdapter对象填充DataSet。

(2) 通过DataAdapter对象操作DataSet实现更新数据库。

(3) 把XML数据流或文本加载到DataSet。

下面我们通过一个实例来学习DataSet对象的使用方法。

启动Visual Studio.NET 2003,新建一个ASP.NET Web应用程序,命名为Adodotnet。如图8.2所示。

图8.2 新建Adodotnet Web应用程序

本实例需要数据库,我们使用Access 2003 新建一个StudentInfor.mdb数据库,将该数据库保存到Adodotnet Web项目的文件下。该数据库包含一个数据表student,字段属性如图8.3所示。

图8.3 字段属性

便于显示效果需要,我们虚拟一些数据,如图8.4所示。

图8.4student数据表中记录内容

首先新建一个Web窗体,命名为DataSet.aspx, 从工具箱中的Web控件列表里选择DataGrid控件,并添加到DataSet.aspx内,DataGrid控件的ID为" DataGrid1",该控件是数据库操作控件,将在下一章中详细介绍,如图8.5所示。

图8.5 DataSet.aspx设计窗口中的DataGrid控件

切换至DataSet.aspx的HTML窗口,我们可以看到主要HTML代码片段如下:

<form id="Form1" method="post" runat="server">

<asp:datagrid id="DataGrid1" style="Z-INDEX: 101; LEFT: 8px;

POSITION: absolute; TOP: 8px" runat="server"></asp:datagrid>

</form>

进入DataSet.aspx 的逻辑编码窗口,添加逻辑代码。DataSet.aspx.vb的内容如下:

'-----code begin-------

Imports System.Data

Imports System.Web

Public Class DataSet

Inherits System.Web.UI.Page

#Region " Web 窗体设计器生成的代码 "

'此处省略了窗体设计器生成的代码,以节约篇幅

#End Region

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

'在此处放置初始化页的用户代码

Dim connstr As String'声明数据库连接字符

Dim mycon As OleDb.OleDbConnection

'因为使用Aeecss数据库,所以声明OleDConnention对象

Dim mycmd As OleDb.OleDbDataAdapter

'声明DataAdapter对象

Dim mysql As String

'声明Command命令的 SQL字符串

Try

connstr = "provider=microsoft.jet.oledb.4.0;data source=" + Server.MapPath(".") + "\StudentInfor.mdb"

'为连接字符串赋值

mycon = New OleDb.OleDbConnection(connstr)

'实例化Connection对象

mysql = "Select * from student"

'设置SQL语句,即查询数据库中所有内容

mycmd = New OleDb.OleDbDataAdapter(mysql, mycon)

'实例化DataAdapter对象

Dim mydataset As Data.DataSet

'声明DataSet对象

mydataset = New Data.DataSet

'实例化DataSet对象

mycmd.Fill(mydataset, "student")

'利用DataAdapter对象的Fill方法填充mydataset对象,

'填充到mydataset中的数据表名称为student

DataGrid1.DataSource = mydataset

'DataGrid1控件添加数据源,即mydataset对象

DataGrid1.DataMember = "student"

'DataGrid1控件指定数据表

DataGrid1.DataBind()

Catch ex As Exception

'如果出现错误,输出错误信息

Response.Write("程序出现错误, 错误信息如下: <br>" & ex.Message)

Finally

mycon.Close() '关闭数据连接

End Try

End Sub

End Class

'------code end -------

保存编译后,通过浏览器预览如图8.6所示。

图8.6DataSet.aspx实例运行结果

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有