1 / 24

第 11 章 使用 DataSet 访问数据库

第 11 章 使用 DataSet 访问数据库. 本章内容: DataSet 的基本构成,访问和填充 DataSet ,修改 DataSet 及数据更新。 本章重点: DataSet 的基本构成,常用子对象、属性和方法,使用 DataSet 与 DataAdapter 配合完成常规数据库操作。. 11.1 DataSet 的基本构成. 11.1.1 DataSet 、 DataAdapter 和数据源之间的关系. 11.1.2 DataSet 的组成结构和工作过程 1. DataSet 的组成结构. 11.1.3 DataSet 中的常用子对象.

Télécharger la présentation

第 11 章 使用 DataSet 访问数据库

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第11章 使用DataSet访问数据库 本章内容:DataSet的基本构成,访问和填充DataSet,修改DataSet及数据更新。 本章重点:DataSet的基本构成,常用子对象、属性和方法,使用DataSet与DataAdapter配合完成常规数据库操作。

  2. 11.1 DataSet的基本构成 • 11.1.1 DataSet、DataAdapter和数据源之间的关系

  3. 11.1.2 DataSet的组成结构和工作过程 • 1. DataSet的组成结构

  4. 11.1.3 DataSet中的常用子对象

  5. 11.1.4 DataSet对象常用属性和方法 • 1. DataSet对象的常用属性 • 2. DataSet对象的常用方法

  6. 11.1.5 构建DataSet的方法 • 1. 通过DataAdapter的Fill()方法 • 2. 通过手工编程方式构建DataSet

  7. (1)DataTable • DataTable是内存中的一个关系数据表,可以作为DataSet中的一个成员使用,也可以独立创建使用。要把DataTable作为DataSet中的一个成员使用,可按以下步骤操作。 • ① 创建一个空的数据集: • DataSet ds = new DataSet(); • ② 创建一个DataTable对象: • DataTable dt = new DataTable("表名"); • 在创建DataTable时,可以指定DataTable的表名。如果没有指定表名,则自动创建后缀从0开始递增的默认表名Table0、Table1、Table2等。

  8. ③ 把表添加到DataSet中: • ds.Tables.Add(表对象名); • ds.Tables.Add("表名"); • 如果添加的表名在DataSet中已经存在,则会引发异常。 • 上面创建的表没有表结构,要定义表结构,必须创建DataColumn对象,并把数据列添加到表的Columns[]集合中。在为表定义结构后,通过DataRow对象把数据行添加到表的Rows[]集合中。

  9. (2)DataColumn • DataTable的结构是通过向DataTable中添加一个或多个DataColumn对象来实现的。DataColumn对象有一些属性用于对输入数据的限制,包括数据类型、数据长度、默认值等,常用属性见表11-4。

  10. ① 定义DataColumn有两种方法。 • 第一种方法:先创建空的DataColumn对象,然后设置该对象的属性。 • 例如,下面是创建StudentName(学生姓名)列的代码: • DataClumn dcStudentName=new DataColumn(); //创建StudentName列对象 • dcStudentName.ColumnName="StudentName"; //定义列名为StudentName • dcStudentName.DataType=System.Type.GetType("System.String"); //定义类型为String • dcStudentName.MaxLength=20; //定义列的最大字符数为20个字符

  11. 第二种方法:在创建DataColumn对象时提供列名和列的数据类型,然后再设置该对象的属性。第二种方法:在创建DataColumn对象时提供列名和列的数据类型,然后再设置该对象的属性。 • 下面也是创建StudentName列的代码: • DataColumn dcStudentName=new DataColumn("StudentName", typeof(string)); • dcStudentName. MaxLength=20; • ② 在表中添加列。 • dt.Columns.Add(列对象名); • ds.Tables["表名"].Column.Add("列名", 列类型);

  12. (3)DataRow • 在DataTable中,用DataColumn定义好表结构后,可以通过DataRow把记录数据添加到DataTable中。 • 例如,下面代码把“黄颖”添加到用DataColumn定义好的DataTable中。 • DataRow drStudentInfo=dt.NewRow() • drStudentInfo["dcStudentName"]="黄颖";

  13. 11.2 访问和填充DataSet • 11.2.1 创建DataSet • 创建数据集对象的语法格式如下: • DataSet 数据集对象名 = new DataSet(); • 或 • DataSet 数据集对象名 = new DataSet("表名"); • 其中,前一个语法格式表示要先创建一个空数据集,以后再将已经建立的数据表(DataTable)添加进来;后一个语法格式是先建立数据表,然后建立包含该数据表的数据集。

  14. 11.2.2 填充DataSet • 所谓“填充”,是指将DataAdapter对象通过执行SQL语句从数据源得到的返回结果,使用DataAdapter对象的Fill方法传递给DataSet对象。其常用语法格式如下: • 数据适配器对象名.Fill(数据集对象名); • 或 • 数据适配器对象名.Fill(数据集对象名, "表名");

  15. 填充DataSet的一般方法和步骤如下。 • ① 使用Connection对象建立与数据库的连接: • SqlConnection conn = new SqlConnection(); //创建SQL Server连接对象 • 这里不需要建立Command对象。 • ② 创建DataAdapter对象: • SqlDataAdapter da = new SqlDataAdapter(); //创建空的DataAdapter对象 • ③ 创建从数据库查询数据用的Select SQL语句: • string SelectSql = "select * from StudentInfo";

  16. 设置DataAdapter对象的SelectCommand属性,使用conn指定连接,执行SelectSql指定的SQL语句,从数据库中取出需要的数据。代码如下: • da.SelectCommand = new SqlCommand(SelectSql, conn); • ⑤ 创建一个空DataSet对象: • DataSet ds = new DataSet(); • ⑥ 使用DataAdapter对象的Fill方法填充DataSet: • da.Fill(ds); //将DataAdapter执行SQL语句返回的结果填充到DataSet对象 • ⑦ 为GridView控件设置数据源,并绑定,以便在GridView控件中显示DataSet中的数据。

  17. 【例11-1】使用DataSet浏览数据库。程序运行后能将SQL Server数据库StudentDB的StudentInfo表中所有记录显示到GridView控件中。 • protected void Page_Load(object sender, EventArgs e) • { • SqlConnection conn = new SqlConnection(); //创建SQL Server连接对象 • //为连接对象的连接字符串属性赋值 • //其中“MICROSOF-63A313\MSSQLSERVER2008”为SQL Server服务器计算机名称 • //使用时要更换为自己的计算机和数据库服务器名称。 • //注意,连接字符串中的“\”字符,在程序代码中需要转义,所以要写为“\\” • conn.ConnectionString="Data Source =MICROSOF-63A313\\MSSQLSERVER2008; • Initial Catalog=StudentDB; Integrated Security=True"; • SqlDataAdapter da = new SqlDataAdapter(); //创建DataAdapter对象 • string SelectSql = "select * from StudentInfo"; //定义从数据库查询数据用的Select SQL语句 • da.SelectCommand = new SqlCommand(SelectSql, conn);//执行SelectSql指定的Select SQL语句 • DataSet ds = new DataSet(); //创建一个空DataSet对象 • da.Fill(ds); //将DataAdapter执行SQL语句返回的结果填充到DataSet对象中 • GridView1.DataSource = ds; //设置填充后的DataSet对象为GridView控件的数据源 • GridView1.DataBind(); • }

  18. 【例11-2】 • protected void Page_Load(object sender, EventArgs e) • { • SqlConnection conn = new SqlConnection(); //创建SQL Server连接对象 • //@符号的作用是忽略转义字符,所以后面字符串中写一个“\” • conn.ConnectionString=@"Data Source=MICROSOF-63A313\MSSQLSERVER2008; • Initial Catalog=StudentDB; Integrated Security=True"; • SqlDataAdapter da = new SqlDataAdapter(); //创建DataAdapter对象 • string SelectSql = "select * from StudentInfo where Sex = '女';" + • "select * from StudentInfo where Email like '%163%'"; • //定义从数据库查询数据用的Select SQL语句,本例是两条Select语句 • da.SelectCommand = new SqlCommand(SelectSql, conn); //执行SQL语句并保存到da中 • DataSet ds = new DataSet(); //创建一个空DataSet对象 • da.Fill(ds); //把da中的数据填充到ds中,将生成两个表 • GridView1.Caption = "<b>性别为“女”的所有记录</b>"; • GridView1.DataSource = ds.Tables[0]; //使用第一个结果集为GridView1的数据源 • GridView1.DataBind(); //绑定数据源 • GridView2.Caption = "<b>电子邮箱地址中包含“163”的所有记录</b>"; • GridView2.DataSource = ds.Tables[1]; //使用第二个结果集为GridView2的数据源 • GridView2.DataBind(); //绑定数据源 • }

  19. 11.3 修改DataSet及数据更新 • 11.3.1 添加新记录 • 在用DataSet添加新记录时,需要自定义一个与要添加记录的数据表完全相同的DataTable,然后把DataTable添加到DataSet中。通过DataSet向数据表添加新记录的一般方法和步骤如下。 • ① 使用Connection对象建立与数据库的连接。 • ② 创建从数据库查询数据用的Select SQL语句。 • ③ 通过DataAdapter对象用Select SQL语句从数据库中取出需要的数据。 • ④ 使用SqlCommandBuilder对象为DataAdapter对象自动生成更新命令。 • ⑤ 创建DataSet对象。 • ⑥ 使用DataAdapter对象的Fill()方法填充DataSet。 • ⑦ 使用NewRow()方法在DataSet中填充的表对象中创建一个新行对象。 • ⑧ 为新行中各字段赋值。 • ⑨ 将新行对象添加到DataSet中填充的表对象中。 • ⑩ 调用DataAdapter对象的Update()方法将数据保存到数据库中。

  20. 【例11-3】使用DataSet向数据库中添加新记录(行)。【例11-3】使用DataSet向数据库中添加新记录(行)。 • 页面装入时在GridView控件中显示当前数据表中所有记录,代码如下: • protected void Page_Load(object sender, EventArgs e) • { • SqlConnection conn = new SqlConnection(); //创建SQL Server连接对象 • conn.ConnectionString=@"Data Source=服务器名;Initial Catalog=StudentDB; • Integrated Security=True"; • //把“服务器名”更改为自己的SQL Server服务器实例名 • SqlDataAdapter da = new SqlDataAdapter(); //创建DataAdapter对象 • string SelectSql = "select * from StudentInfo"; • da.SelectCommand = new SqlCommand(SelectSql, conn); • DataSet ds = new DataSet(); //创建一个空DataSet对象 • da.Fill(ds,"studentInfo"); • GridView1.DataSource = ds; //设置填充后的DataSet对象为GridView控件的数据源 • GridView1.DataBind(); • }

  21. 单击“添加记录”按钮时执行的事件代码如下:单击“添加记录”按钮时执行的事件代码如下: • protected void AddRow_Click(object sender, EventArgs e) • { • SqlConnection conn = new SqlConnection(); //创建SQL Server连接对象 • conn.ConnectionString=@"Data Source=服务器名;Initial Catalog=StudentDB; • Integrated Security=True"; • //把“服务器名”更改为自己的SQL Server服务器实例名 • SqlDataAdapter da = new SqlDataAdapter(); //创建DataAdapter对象 • string SelectSql = "select * from StudentInfo"; • da.SelectCommand = new SqlCommand(SelectSql, conn); • //自动生成单表,用于将对DataSet所做的更改与关联的SQL Server数据库的更改相协调 • SqlCommandBuilder scb = new SqlCommandBuilder(da); //为DataAdapter自动生成更新命令 • DataSet ds = new DataSet(); //创建一个空DataSet对象 • da.Fill(ds); • DataRow StudentNewRow = ds.Tables[0].NewRow();//在DataSet第一个表中创建一个新行对象 • StudentNewRow["StudentID"] = "200902602028"; //为新行的各字段赋值 • StudentNewRow["StudentName"] = "黄蓉"; • StudentNewRow["Sex"] = "女"; • StudentNewRow["DateOfBirth"] = "1991-09-28"; • StudentNewRow["Specialty"] = "网络技术"; • StudentNewRow["Email"] = "hy9109@126.com"; • ds.Tables[0].Rows.Add(StudentNewRow); //将新行对象添加到DataSet中填充的表对象中 • GridView1.DataSource = ds.Tables[0]; //在GridView中显示添加记录后的结果 • GridView1.DataBind(); • da.Update(ds); //将DataSet中数据变化提交到数据库(更新数据库) • }

  22. 11.3.2 修改数据库记录 • 【例11-4】通过DataSet对象更新数据表记录。 • 在例11-3创建的Web窗体中添加“更新记录”按钮,其单击事件代码如下: • protected void EditRow_Click(object sender, EventArgs e) • { • SqlConnection conn = new SqlConnection(); • conn.ConnectionString=@"Data Source=服务器名;Initial Catalog=StudentDB; • Integrated Security=True"; • //把“服务器名”更改为自己的SQL Server服务器实例名 • SqlDataAdapter da = new SqlDataAdapter(); • string SelectSql = "select * from StudentInfo"; • da.SelectCommand = new SqlCommand(SelectSql, conn); • SqlCommandBuilder scb = new SqlCommandBuilder(da); //为DataAdapter自动生成更新命令 • DataSet ds = new DataSet(); • da.Fill(ds); • //创建行对象,从表Tables[0]对象中得到要修改的行,修改第4行的记录 • DataRow MyRow = ds.Tables[0].Rows[3]; • MyRow["StudentID"] = "200902601100"; //为该行各字段赋以新值,如果学号重复,则出错 • MyRow["StudentName"] = "张无忌"; • GridView1.DataSource = ds.Tables[0]; //在GridView中显示添加记录后的结果 • GridView1.DataBind(); • da.Update(ds); //将DataSet中数据变化提交到数据库(更新数据库)中 • }

  23. 11.3.3 删除记录 • 【例11-5】通过DataSet对象删除数据表记录。 • 在例11-3创建的Web窗体中添加“删除记录”按钮,其单击事件代码如下: • protected void DelRecord_Click(object sender, EventArgs e) • { • SqlConnection conn = new SqlConnection(); • conn.ConnectionString=@"Data Source=服务器名;Initial Catalog=StudentDB; • Integrated Security=True"; • //把“服务器名”更改为自己的SQL Server服务器实例名 • SqlDataAdapter da = new SqlDataAdapter(); • string SelectSql = "select * from StudentInfo"; • da.SelectCommand = new SqlCommand(SelectSql, conn); • SqlCommandBuilder scb = new SqlCommandBuilder(da); //为DataAdapter自动生成更新命令 • DataSet ds = new DataSet(); • da.Fill(ds); • //创建行对象,指定要删除的行索引值(删除第1个记录) • DataRow DeleteRow = ds.Tables[0].Rows[0]; • DeleteRow.Delete(); //调用DataRow对象的Delete()方法,从DataSet填充的数据表中删除行 • GridView1.DataSource = ds.Tables[0]; //在GridView中显示删除记录后的结果 • GridView1.DataBind(); • da.Update(ds); • }

  24. 11.4 实训 • 实训目的 • 1)掌握配合使用DataSet和DataAdapter访问SQL Server数据库的基本方法(增、删、改、查)。 • 2)掌握DataSet.Tables子对象及DataRow对象在程序设计中的具体使用方法。 • 实训要求

More Related