第8章使用DataSet访问数据库_第1页
第8章使用DataSet访问数据库_第2页
第8章使用DataSet访问数据库_第3页
第8章使用DataSet访问数据库_第4页
第8章使用DataSet访问数据库_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、本章内容:本章内容:DataSetDataSet的基本构成,访问和填充的基本构成,访问和填充DataSetDataSet,修,修改改DataSetDataSet及数据更新。及数据更新。本章重点:本章重点:DataSetDataSet的基本构成,常用子对象、属性和方法,的基本构成,常用子对象、属性和方法,使用使用DataSetDataSet与与DataAdapterDataAdapter配合完成常规数据库操作。配合完成常规数据库操作。DataSetDataSet(数据集)对象是(数据集)对象是ADO.NETADO.NET的核心构建之的核心构建之一,它是数据的内存表示形式,提供了独立于数据一,它是

2、数据的内存表示形式,提供了独立于数据源的一致关系编程模型。源的一致关系编程模型。DataSetDataSet表示整个数据集,包括表、约束与表与表之表示整个数据集,包括表、约束与表与表之间的关系。由于间的关系。由于DataSetDataSet独立于数据源,故其中可以独立于数据源,故其中可以包含应用程序的本地数据,也可以包含来自多个数包含应用程序的本地数据,也可以包含来自多个数据源的数据。据源的数据。可以把数据集理解为内存中的一个临时数据库,它可以把数据集理解为内存中的一个临时数据库,它把应用程序需要的数据临时保存在内存中。由于这把应用程序需要的数据临时保存在内存中。由于这些数据都缓存在本地计算机

3、中,就不需要与数据库些数据都缓存在本地计算机中,就不需要与数据库服务器一直保持连接。服务器一直保持连接。当应用程序需要数据时,就直接从内存中的数据集当应用程序需要数据时,就直接从内存中的数据集中读取数据;也可以修改数据集中的数据,然后把中读取数据;也可以修改数据集中的数据,然后把数据集中修改的数据写回数据库。数据集中修改的数据写回数据库。8.1.1 DataSet8.1.1 DataSet、DataAdapterDataAdapter和数据源之间的关和数据源之间的关系系l数据集不直接与数据库联系,数据集与数据库之间的联系是通过.NET数据提供程序来实现的,因此数据集是独立于任何数据库的。lDa

4、taSet是实现ADO.NET断开式连接的核心,通过DataAdapter从数据源获得数据后就断开了与数据库之间的连接,此后应用程序所有对数据源的操作,均转向到DataSet。l当所有这些操作完成后,可以通过DataAdapter提供的数据源更新方法将修改后的数据写入数据库中。8.1.2 DataSet8.1.2 DataSet的组成结构和工作过程的组成结构和工作过程1. DataSet1. DataSet的组成结构的组成结构l数据集与数据库的结构相似,数据集中也包含多个数据表。lDataSet主要由数据表集合、数据关系集合和ExtendedProperties8.1.2 DataSet8.1

5、.2 DataSet的组成结构和工作过程的组成结构和工作过程1. DataSet1. DataSet的基本工作过程的基本工作过程首先首先,完成与数据库的连接,完成与数据库的连接,DataSetDataSet在存放在存放ASP.NETASP.NET网站的服网站的服务器中为每一个用户开辟一块内存,通过务器中为每一个用户开辟一块内存,通过DataAdapterDataAdapter,将得到,将得到的数据填充到的数据填充到DataSetDataSet中。中。然后然后,把,把DataSetDataSet中的数据发送给客户中的数据发送给客户端。端。ASP.NETASP.NET网站服务器中的网站服务器中的D

6、ataSetDataSet使用完成以后,将释放使用完成以后,将释放DataSetDataSet所占用的内存。所占用的内存。客户端读入数据后,在内存中保存一份客户端读入数据后,在内存中保存一份DataSetDataSet的副本,随后断的副本,随后断开与数据库的连接。客户端应用程序所有针对数据库的操作都是开与数据库的连接。客户端应用程序所有针对数据库的操作都是指向本地指向本地DataSetDataSet的。待数据库操作完毕后,可通过的。待数据库操作完毕后,可通过DataSetDataSet、DataAdapterDataAdapter提供的方法统一把更新后的提供的方法统一把更新后的DataSetD

7、ataSet发送到服务器发送到服务器中,服务器接收中,服务器接收DataSetDataSet并修改数据库中的数据。并修改数据库中的数据。8.1.3 DataSet8.1.3 DataSet中的常用子对象中的常用子对象8.1.4 DataSet8.1.4 DataSet对象常用属性和方法对象常用属性和方法1. DataSet1. DataSet对象的常用属性对象的常用属性2. DataSet2. DataSet对象的常用方法对象的常用方法8.1.5 8.1.5 构建构建DataSetDataSet的方法的方法1. 1. 通过通过DataAdapterDataAdapter的的Fill()Fill

8、()方法方法2. 2. 通过手工编程方式构建通过手工编程方式构建DataSetDataSet自定义自定义DataTableDataTable、DataColumnDataColumn、DataRowDataRow及及DataRelationDataRelation、ConstraintConstraint,然后然后构建构建DataSetDataSet,最后最后把把DataTableDataTable添加到添加到DataSetDataSet中。中。(1 1)DataTableDataTableDataTableDataTable是内存中的一个关系数据表,可以作为是内存中的一个关系数据表,可以作为

9、DataSetDataSet中的一个成员使用,也可以独立创建使用。中的一个成员使用,也可以独立创建使用。要把要把DataTableDataTable作为作为DataSetDataSet中的一个成员使用,可按以中的一个成员使用,可按以下步骤操作。下步骤操作。 创建一个空的数据集:创建一个空的数据集:DataSet ds = new DataSet();DataSet ds = new DataSet(); 创建一个创建一个DataTableDataTable对象:对象:DataTable dt = new DataTable(DataTable dt = new DataTable(表名表名);

10、); 在创建在创建DataTableDataTable时,可以指定时,可以指定DataTableDataTable的表名。如果没有指定表名,的表名。如果没有指定表名,则自动创建后缀从则自动创建后缀从0 0开始递增的默认表名开始递增的默认表名Table0Table0、Table1Table1、Table2Table2等。等。 把表添加到把表添加到DataSetDataSet中:中:ds.Tables.Add(ds.Tables.Add(表对象名表对象名); );ds.Tables.Add(ds.Tables.Add(表名表名);); 如果添加的表名在如果添加的表名在DataSetDataSet中

11、已经存在,则会引发异常。中已经存在,则会引发异常。 上面创建的表没有表结构,要定义表结构,必须创建上面创建的表没有表结构,要定义表结构,必须创建DataColumnDataColumn对对象,并把数据列添加到表的象,并把数据列添加到表的ColumnsColumns集合中。在为表定义结构后,集合中。在为表定义结构后,通过通过DataRowDataRow对象把数据行添加到表的对象把数据行添加到表的RowsRows集合中。集合中。(2 2)DataColumnDataColumnDataTableDataTable的结构是通过向的结构是通过向DataTableDataTable中添加一个或多个中添加

12、一个或多个DataColumnDataColumn对象来实现的。对象来实现的。DataColumnDataColumn对象有一些属对象有一些属性用于对输入数据的限制,包括数据类型、数据长度、默性用于对输入数据的限制,包括数据类型、数据长度、默认值等,常用属性见表认值等,常用属性见表8-48-4。 定义定义DataColumnDataColumn有两种方法。有两种方法。第一种方法:先创建空的第一种方法:先创建空的DataColumnDataColumn对象,然后设置该对象的属性。对象,然后设置该对象的属性。例如,下面是创建例如,下面是创建StudentNameStudentName(学生姓名)列

13、的代码:(学生姓名)列的代码:DataClumn DataClumn dcStudentName=dcStudentName=new DataColumn(); new DataColumn(); /创建创建StudentNameStudentName列对象列对象dcStudentName.dcStudentName.ColumnNameColumnName=StudentName;=StudentName; / /定义列名为定义列名为StudentNameStudentNamedcStudentNamedcStudentName.DataType.DataType=System.Type.G

14、etType(System.St=System.Type.GetType(System.String); /ring); /定义类型为定义类型为StringStringdcStudentName.dcStudentName.MaxLengthMaxLength=20; =20; /定义列的最大字符数为定义列的最大字符数为2020个字符个字符第二种方法:在创建第二种方法:在创建DataColumnDataColumn对象时提供列对象时提供列名和列的数据类型,然后再设置该对象的属性。名和列的数据类型,然后再设置该对象的属性。下面也是创建下面也是创建StudentNameStudentName列的代

15、码:列的代码:DataColumn DataColumn dcStudentName=dcStudentName=new new DataColumnDataColumn(StudentName, typeof(string);(StudentName, typeof(string);dcStudentName. MaxLength=20;dcStudentName. MaxLength=20; 在表中添加列。在表中添加列。dt.Columns.Add(dt.Columns.Add(列对象名列对象名); );ds.Tablesds.Tables表名表名.Column.Add(.Column.A

16、dd(列名列名, , 列类型列类型); );(3 3)DataRowDataRow在在DataTableDataTable中,用中,用DataColumnDataColumn定义好表结构后,定义好表结构后,可以通过可以通过DataRowDataRow把记录数据添加到把记录数据添加到DataTableDataTable中。中。例如,下面代码把例如,下面代码把“黄颖黄颖”添加到用添加到用DataColumnDataColumn定定义好的义好的DataTableDataTable中。中。DataRow DataRow drStudentInfo=drStudentInfo=dt.NewRow()dt

17、.NewRow()drStudentInfodrStudentInfodcStudentNamedcStudentName=黄颖黄颖; ;8.2.1 8.2.1 创建创建DataSetDataSet创建数据集对象的语法格式如下:创建数据集对象的语法格式如下:DataSet DataSet 数据集对象名数据集对象名 = new DataSet();= new DataSet();或或DataSet DataSet 数据集对象名数据集对象名 = new DataSet(= new DataSet(表名表名);); 其中,其中,前一个语法格式表示要先创建一个空数据集,以后再将前一个语法格式表示要先创

18、建一个空数据集,以后再将已经建立的数据表(已经建立的数据表(DataTableDataTable)添加进来)添加进来;后一个语法格式后一个语法格式是先建立数据表,然后建立包含该数据表的数据集。是先建立数据表,然后建立包含该数据表的数据集。8.2.2 8.2.2 填充填充DataSetDataSet所谓所谓“填充填充”,是指将,是指将DataAdapterDataAdapter对象通过执行对象通过执行SQLSQL语句从数据源得语句从数据源得到的返回结果。到的返回结果。使用使用DataAdapterDataAdapter对象的对象的FillFill方法传递给方法传递给DataSetDataSet对

19、象。对象。其常用语法格式如下:其常用语法格式如下:数据适配器对象名数据适配器对象名.Fill(.Fill(数据集对象名数据集对象名); );或或数据适配器对象名数据适配器对象名.Fill(.Fill(数据集对象名数据集对象名, , 表名表名););l“数据库适配器对象名”为DataSetAdapter对象实例;“数据集对象名”为DataSet对象;“表名”为用于数据表映射的临时表名称。在第一种格式中仅实现了DataSet对象的填充,而第二种格式则实现了填充DataSet对象和指定一个可以引用的别名两项任务。填充填充DataSetDataSet的一般方法和步骤如下。的一般方法和步骤如下。 使用使

20、用ConnectionConnection对象建立与数据库的连接:对象建立与数据库的连接:SqlConnection conn = new SqlConnection(); SqlConnection conn = new SqlConnection(); /创建创建SQL ServerSQL Server连接对象,连接对象,这里不需要建立这里不需要建立CommandCommand对象。对象。 创建创建DataAdapterDataAdapter对象:对象:SqlDataAdapter da = new SqlDataAdapter(); /SqlDataAdapter da = new Sq

21、lDataAdapter(); /创建创建空的空的DataAdapterDataAdapter对象对象 创建从数据库查询数据用的创建从数据库查询数据用的Select SQLSelect SQL语句:语句:string SelectSql = select string SelectSql = select * * from StudentInfo; from StudentInfo; 设置设置DataAdapterDataAdapter对象的对象的SelectCommandSelectCommand属性,使用属性,使用connconn指指定连接,执行定连接,执行SelectSqlSelectS

22、ql指定的指定的SQLSQL语句,从数据库中取出需要的语句,从数据库中取出需要的数据。代码如下:数据。代码如下:da.SelectCommand = new SqlCommand(SelectSql, conn);da.SelectCommand = new SqlCommand(SelectSql, conn); 创建一个空创建一个空DataSetDataSet对象:对象:DataSet ds = new DataSet();DataSet ds = new DataSet(); 使用使用DataAdapterDataAdapter对象的对象的FillFill方法填充方法填充DataSetD

23、ataSet:da.Fill(ds); da.Fill(ds); / /将将DataAdapterDataAdapter执行执行SQLSQL语句返回的结果填充到语句返回的结果填充到DataSetDataSet对象对象 为为GridViewGridView控件设置数据源,并绑定,以便在控件设置数据源,并绑定,以便在GridViewGridView控件控件中显示中显示DataSetDataSet中的数据。中的数据。【例例8-18-1】使用使用DataSetDataSet浏览数据库。程序运行后能将浏览数据库。程序运行后能将SQL ServerSQL Server数据库数据库StudentDBStud

24、entDB的的StudentInfoStudentInfo表表中所有记录显示到中所有记录显示到GridViewGridView控件中。控件中。 protected void Page_Load(object sender, EventArgs e)protected void Page_Load(object sender, EventArgs e) SqlConnection conn = new SqlConnection(); / SqlConnection conn = new SqlConnection(); /创建创建SQL ServerSQL Server连接对象连接对象 /为连

25、接对象的连接字符串属性赋值为连接对象的连接字符串属性赋值 /其中其中“MICROSOF-63A313MSSQLSERVER2008MICROSOF-63A313MSSQLSERVER2008”为为SQL ServerSQL Server服务器计算机名称服务器计算机名称 /使用时要更换为自己的计算机和数据库服务器名称。使用时要更换为自己的计算机和数据库服务器名称。 /注意,连接字符串中的注意,连接字符串中的“ ”字符,在程序代码中需要转义,所以要写为字符,在程序代码中需要转义,所以要写为“” conn.ConnectionString=Data Source =.SQLEXPRESS conn.

26、ConnectionString=Data Source =.SQLEXPRESSInitial Catalog=StudentDB; Integrated Security=True;Initial Catalog=StudentDB; Integrated Security=True; SqlDataAdapter da = new SqlDataAdapter(); / SqlDataAdapter da = new SqlDataAdapter(); /创建创建DataAdapterDataAdapter对象对象 string SelectSql = select string Sel

27、ectSql = select * * from StudentInfo; / from StudentInfo; /定义从数据库查询数据用的定义从数据库查询数据用的Select SQLSelect SQL语句语句 da.SelectCommand = new SqlCommand(SelectSql, conn);/da.SelectCommand = new SqlCommand(SelectSql, conn);/执行执行SelectSqlSelectSql指定的指定的Select SQLSelect SQL语语句句 DataSet ds = new DataSet(); /DataSe

28、t ds = new DataSet(); /创建一个空创建一个空DataSetDataSet对象对象 da.Fill(ds); /da.Fill(ds); /将将DataAdapterDataAdapter执行执行SQLSQL语句返回的结果填充到语句返回的结果填充到DataSetDataSet对象中对象中 GridView1.DataSource = ds; /GridView1.DataSource = ds; /设置填充后的设置填充后的DataSetDataSet对象为对象为GridViewGridView控件的数据源控件的数据源 GridView1.DataBind();GridVie

29、w1.DataBind(); 【例例8-28-2】protected void Page_Load(object sender, EventArgs e)protected void Page_Load(object sender, EventArgs e) SqlConnection conn = new SqlConnection(); / SqlConnection conn = new SqlConnection(); /创建创建SQL ServerSQL Server连接对象连接对象 /符号的作用是忽略转义字符,所以后面字符串中写一个符号的作用是忽略转义字符,所以后面字符串中写一个“

30、 ” conn.ConnectionString=Data Source=MICROSOF-63A313MSSQLSERVER2008; conn.ConnectionString=Data Source=MICROSOF-63A313MSSQLSERVER2008;Initial Catalog=StudentDB; Integrated Security=True; Initial Catalog=StudentDB; Integrated Security=True; SqlDataAdapter da = new SqlDataAdapter(); / SqlDataAdapter d

31、a = new SqlDataAdapter(); /创建创建DataAdapterDataAdapter对象对象 string SelectSql = select string SelectSql = select * * from StudentInfo where Sex = from StudentInfo where Sex = 女女; +; + select select * * from StudentInfo where Email like %163%; from StudentInfo where Email like %163%; / /定义从数据库查询数据用的定义从数

32、据库查询数据用的Select SQLSelect SQL语句,本例是两条语句,本例是两条SelectSelect语句语句 da.SelectCommand = new SqlCommand(SelectSql, conn); /da.SelectCommand = new SqlCommand(SelectSql, conn); /执行执行SQLSQL语句并保存到语句并保存到dada中中 DataSet ds = new DataSet(); /DataSet ds = new DataSet(); /创建一个空创建一个空DataSetDataSet对象对象 da.Fill(ds); /da.

33、Fill(ds); /把把dada中的数据填充到中的数据填充到dsds中,将生成两个表中,将生成两个表 GridView1.Caption = GridView1.Caption = 性别为性别为“女女”的所有记录的所有记录; GridView1.DataSource = ds.Tables0; GridView1.DataSource = ds.Tables0; / /使用第一个结果集为使用第一个结果集为GridView1GridView1的数据源的数据源 GridView1.DataBind(); /GridView1.DataBind(); /绑定数据源绑定数据源 GridView2.C

34、aption = GridView2.Caption = 电子邮箱地址中包含电子邮箱地址中包含“163163”的所有记录的所有记录; GridView2.DataSource = ds.Tables1; GridView2.DataSource = ds.Tables1; /使用第二个结果集为使用第二个结果集为GridView2GridView2的数据源的数据源 GridView2.DataBind(); GridView2.DataBind(); /绑定数据源绑定数据源 8.3.1 8.3.1 添加新记录添加新记录在用在用DataSetDataSet添加新记录时,需要自定义一个与要添加记录的

35、数据表完全相同的添加新记录时,需要自定义一个与要添加记录的数据表完全相同的DataTableDataTable,然后把,然后把DataTableDataTable添加到添加到DataSetDataSet中。中。通过通过DataSetDataSet向数据表添加新记录的一般方法和步骤如下。向数据表添加新记录的一般方法和步骤如下。 使用Connection对象建立与数据库的连接。 创建从数据库查询数据用的Select SQL语句。 通过DataAdapter对象用Select SQL语句从数据库中取出需要的数据。 使用SqlCommandBuilder对象为DataAdapter对象自动生成更新命令

36、。 创建DataSet对象。 使用DataAdapter对象的Fill()方法填充DataSet。 使用NewRow()方法在DataSet中填充的表对象中创建一个新行对象。 为新行中各字段赋值。 将新行对象添加到DataSet中填充的表对象中。 调用DataAdapter对象的Update()方法将数据保存到数据库中。【例例8-38-3】使用使用DataSetDataSet向数据库中添加新记录(行)。向数据库中添加新记录(行)。页面装入时在页面装入时在GridViewGridView控件中显示当前数据表中所有记录,代码如下:控件中显示当前数据表中所有记录,代码如下:protected voi

37、d Page_Load(object sender, EventArgs e)protected void Page_Load(object sender, EventArgs e) SqlConnection conn = new SqlConnection(); / SqlConnection conn = new SqlConnection(); /创建创建SQL ServerSQL Server连接对连接对象象 conn.ConnectionString=Data Source=conn.ConnectionString=Data Source=服务器名服务器名;Initial ;In

38、itial Catalog=StudentDB; Integrated Security=True;Catalog=StudentDB; Integrated Security=True; / /把把“服务器名服务器名”更改为自己的更改为自己的SQL ServerSQL Server服务器实例名服务器实例名 SqlDataAdapter da = new SqlDataAdapter(); /SqlDataAdapter da = new SqlDataAdapter(); /创建创建DataAdapterDataAdapter对象对象 string SelectSql = select st

39、ring SelectSql = select * * from StudentInfo; from StudentInfo; da.SelectCommand = new SqlCommand(SelectSql, conn); da.SelectCommand = new SqlCommand(SelectSql, conn); DataSet ds = new DataSet(); /DataSet ds = new DataSet(); /创建一个空创建一个空DataSetDataSet对象对象 da.Fill(ds,studentInfo);da.Fill(ds,studentInf

40、o); GridView1.DataSource = ds; GridView1.DataSource = ds; / /设置填充后的设置填充后的DataSetDataSet对象为对象为GridViewGridView控件的数据源控件的数据源 GridView1.DataBind(); GridView1.DataBind(); 单击单击“添加记录添加记录”按钮时执行的事件代码如下:按钮时执行的事件代码如下:protected void AddRow_Click(object sender, EventArgs e)protected void AddRow_Click(object send

41、er, EventArgs e) SqlConnection conn = new SqlConnection(); / SqlConnection conn = new SqlConnection(); /创建创建SQL ServerSQL Server连接对象连接对象 conn.ConnectionString=Data Source=conn.ConnectionString=Data Source=服务器名服务器名;Initial Catalog=StudentDB;Initial Catalog=StudentDB;Integrated Security=True; /Integra

42、ted Security=True; /把把“服务器名服务器名”更改为自己的更改为自己的SQL ServerSQL Server服务器实例名服务器实例名 SqlDataAdapter da = new SqlDataAdapter(); /SqlDataAdapter da = new SqlDataAdapter(); /创建创建DataAdapterDataAdapter对象对象 string SelectSql = select string SelectSql = select * * from StudentInfo; from StudentInfo; da.SelectComma

43、nd = new SqlCommand(SelectSql, conn); da.SelectCommand = new SqlCommand(SelectSql, conn); / /自动生成单表,用于将对自动生成单表,用于将对DataSetDataSet所做的更改与关联的所做的更改与关联的SQL ServerSQL Server数据库的更改相协调数据库的更改相协调 SqlCommandBuilder scb = new SqlCommandBuilder(da); /SqlCommandBuilder scb = new SqlCommandBuilder(da); /为为DataAdap

44、terDataAdapter自动生成更新命令自动生成更新命令 DataSet ds = new DataSet(); /DataSet ds = new DataSet(); /创建一个空创建一个空DataSetDataSet对象对象 da.Fill(ds);da.Fill(ds); DataRow StudentNewRow = ds.Tables0.NewRow();/ DataRow StudentNewRow = ds.Tables0.NewRow();/在在DataSetDataSet第一个表中创建一个新行对象第一个表中创建一个新行对象 StudentNewRowStudentID

45、= 200902602028; /StudentNewRowStudentID = 200902602028; /为新行的各字段赋值为新行的各字段赋值 StudentNewRowStudentName = StudentNewRowStudentName = 黄蓉黄蓉; StudentNewRowSex = ; StudentNewRowSex = 女女; ; StudentNewRowDateOfBirth = 1991-09-28“; StudentNewRowSpecialty = StudentNewRowDateOfBirth = 1991-09-28“; StudentNewRowSpecialty = 网络技术网络技术; ; ds.Tables0.Rows.Add(StudentNewRow); /

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论