1 / 30

第 10 章 数据库开发技术

第 10 章 数据库开发技术. 王德俊 上海交通大学继续教育学院. 第 10 章 数据库开发技术. 10.1 数据库系统与ADO.NET概述 10.2 SQL语言简介 10.3 ADO.NET对象. 10.3 ADO.NET 对象. 10.3.1 Connection 对象 10.3.2 Command 对象 10.3.3 DataReader 对象 10.3.4 DataAdapter 对象 10.3.5 DataSet 对象. 10.3 ADO.NET 对象. 10.3.4 DataAdapter 对象.

Télécharger la présentation

第 10 章 数据库开发技术

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. 第10章 数据库开发技术 王德俊 上海交通大学继续教育学院

  2. 第10章 数据库开发技术 10.1 数据库系统与ADO.NET概述 10.2 SQL语言简介 10.3 ADO.NET对象

  3. 10.3 ADO.NET对象 10.3.1 Connection对象 10.3.2 Command对象 10.3.3 DataReader对象 10.3.4 DataAdapter 对象 10.3.5 DataSet对象

  4. 10.3 ADO.NET对象 10.3.4 DataAdapter对象 • DataAdapter对象除了可以实现DataReader对象的功能以外,还可以执行对数据库的插入、更新和删除等操作,其功能要比DataReader对象的功能强得多(要与DataSet对象结合使用)。 • 但强功能的实现就意味着要付出更多的机器资源,因此,如果DataReader对象能完成的任务就不必使用DataAdapter对象。

  5. 10.3.4 DataAdapter对象 • 命名空间: System.Data.SqlClient • 构造函数, 四个重载版本: publicSqlDataAdapter() publicSqlDataAdapter(SqlCommand selectCommand) publicSqlDataAdapter(string selectCommandText, SqlConnection selectConnection) public SqlDataAdapter(string selectCommandText, string selectConnectionString) • 其中,参数selectCommand用于设置实现Select语句的命令对象(SqlCommand类型) • selectCommandText用于设置Select语句文本, • selectConnection用于设置连接对象。

  6. 10.3.4 DataAdapter对象 • 下面四组语句是等价的(其作用都是从数据表student提取所有的数据,cmd为已经初始化好数据库连接和查询语句的SqlCommand对象,strSQL是存放SQL语句的字符串, ConnectionString 存放连接字串): • SqlDataAdapter DataAdapter = new SqlDataAdapter(); //第一组 DataAdapter.SelectCommand = cmd; • SqlDataAdapter DataAdapter = new SqlDataAdapter(cmd); //第二组 • SqlDataAdapter DataAdapter = new SqlDataAdapter(strSQL, conn); //第三组 • SqlDataAdapter DataAdapter = new SqlDataAdapter(strSQL, ConnectionString); //第四组

  7. 10.3.4 DataAdapter对象 • DataAdapter对象包含有SelectCommand、InsertCommand、UpdateCommand和DeleteCommand四个属性,用来定义处理数据存储中数据的命令,并且每个命令都是对Command对象的一个引用,可以共享同一个数据源

  8. 10.3.4 DataAdapter对象 • DeleteCommand属性:用于获取或设置一个 SQL 语句或存储过程,以从数据集中删除记录。而要执行相应的SQL语句和存储过程,可调用ExecuteNonQuery()来实现。 • 例如,从表student中删除学号为‘20102002’的记录,可以用下列代码实现: //…数据库连接代码 SqlDataAdapter DataAdapter = new SqlDataAdapter(); SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; cmd.CommandText = "delete from student where 学号 = '20102002'"; DataAdapter.DeleteCommand = cmd; int n = DataAdapter.DeleteCommand.ExecuteNonQuery(); MessageBox.Show("有条 " + n.ToString() + " 记录被删除!");

  9. 10.3.4 DataAdapter对象 • InsertCommand和UpdateCommand属性 • 用于获取或设置一个SQL语句或存储过程: • 前者用于实现向数据源插入记录 • 后者用于更新记录。它们的使用方法与DeleteCommand属性相同。

  10. 10.3.4 DataAdapter对象 • SelectCommand属性,获取或设置一个SQL语句或存储过程,用于在数据源中选择一个记录集。例如,执行下列代码后,将数据表student中的数据提取到DataAdapter对象中: SqlConnection conn = new SqlConnection(ConnectionString); conn.Open(); SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; cmd.CommandText = "SELECT * FROM student"; SqlDataAdapter DataAdapter = new SqlDataAdapter(); DataAdapter.SelectCommand = cmd;

  11. 10.3.4 DataAdapter对象 • Fill()方法: • 执行SelectCommand中的查询,并将结果填充到DataSet对象的一个数据表(DataTable)中。 • DataSet对象可以理解为元素为DataTable类型的数组,每次填充时是按照既定的设置将结果集填充到对应的元素中。 • 该方法有多个重载版本,其中常用两种: • Fill(DataSet dataset) • Fill(DataSet dataset, string srcTable) //其中,参数srcTable是用于设置所填充的数据表的名称。

  12. 10.3.4 DataAdapter对象 • 例如,下列语句都是将DataAdapter中的数据填充到dataset对象中,但这两次填充分别位于dataset对象不同的两个数据表中,表名分别为t1和t2: DataAdapter.Fill(dataset, "t1"); DataAdapter.Fill(dataset, "t2");

  13. 10.3.4 DataAdapter对象 • Update()方法: • 该方法向数据库提交存储在DataSet(或DataTable、DataRows)中的更改。该方法会返回一个整数值,表示成功更新的记录的数量。 • Update语句的生成可有SqlCommandBuilder的构造函数自动完成。 • 例如: SqlCommandBuilder builder = new SqlCommandBuilder(DataAdapter); DataAdapter.Update(dataset, "Table");

  14. 10.3 ADO.NET对象 10.3.5 DataSet对象 • 每一个DataSet对象通常是一张或多张数据表(DataTable对象)的集合。 • 当DataAdapter对象将数据填充到DataSet对象以后,就可以利用DataSet对象提供的属性和方法对数据进行离线操作。再次连接数据库时,可根据需要将更改结果一次性传送到数据库中 • 操作可以是查询记录、添加记录、修改记录和删除记录,并通过DataAdapter对象的Update()方法可以将对记录的更新结果提交到数据库中。 • 由于DataSet的智能化,只有数据中被更改的部分才会被发送回数据库

  15. 10.3.5 DataSet对象 (1)获取DataSet对象中所有的数据表(DataTable对象), 类似如下代码: for (int i = 0; i < dataset.Tables.Count; i++) { DataTable dt = dataset.Tables[i]; //获取所有的数据表 listBox1.Items.Add(dt.ToString()); //将表名输出到listBox1中 } 其中,dataset.Tables.Count返回dataset中表的数量,dataset.Tables[i]返回索引为i的数据表(DataTable对象)。

  16. 10.3.5 DataSet对象 (2)获取DataSet对象中表的所有字段名(DataTable对象),下面代码是获取数据表t2的所有字段名: for (int i = 0; i < dataset.Tables[“t2”].Columns.Count; i++) { listBox1.Items.Add(dataset.Tables[“t2”].Columns[i].ToString()); //获取列名输出到listBox1中 } 其中,dataset.Tables[“t2”].Columns.Count返回表t2的字段的数量,如果表t2在dataset中的索引为0,则可以写成Tables[0]

  17. 10.3.5 DataSet对象 (3)提取指定数据表中的所有数据项: for (int i = 0; i < dataset.Tables["t2"].Rows.Count; i++) { DataRow dr = dataset.Tables["t2"].Rows[i]; //获取索引为i的行 string s = ""; for (int j = 0; j < dataset.Tables["t2"].Columns.Count; j++) { s += dr[j].ToString() + "\t"; //获取行dr中索引为j的数据项 } listBox1.Items.Add(s); } 其中,dataset.Tables[“t2”].Rows.Count返回表t2的行数, dataset.Tables[“t2”].Rows[i]返回索引为i的行, dataset.Tables["t2"].Columns.Count返回表的列数。

  18. 10.3.5 DataSet对象 • (4)数据绑定 • 绑定方法一:利用控件的DataBindings属性的Add方法把DataSet中某一个数据表中的某一列和组件的某个属性绑定起来,从而达到显示数据的效果。 • 例如,下列语句将dataset中表t2的“姓名”字段绑定到控件textBox1的Text属性中: textBox1.DataBindings.Add(“Text”, dataset, “t2.姓名");

  19. 10.3.5 DataSet对象 • (4)数据绑定 • 绑定方法二:将数据绑定到DataGridView控件中,即将控件的DataSource属性值设置为相应的DataSet对象,将控件的DataMember属性值设置为DataSet对象中的表名。 • 例如,下列语句是将dataset中数据表t2中的数据显示到控件dataGridView1中: DataAdapter.Fill(dataset, "t2"); dataGridView1.DataSource = dataset; dataGridView1.DataMember = "t2"; //将数据显示在dataGridView1

  20. 10.3.5 DataSet对象 • (5)数据更新: 利用DataAdapter对象的Update()方法来保存在DataSet对象所作的更新。 • 例,在对控件dataGridView1中的数据进行修改后,可以用下列两条语句将更新保存到数据库 SqlCommandBuilder builder = new SqlCommandBuilder(DataAdapter); //创建builder语句不能缺少 DataAdapter.Update(dataset, “t2”);//将所作的更新保存到数据库中 ——在调用Update()方法更新数据时,要保证Select返回的结果集包含主健列(当然,对应的数据表要定义主健),否则会出现这样的异常提示信息:“对于不返回任何键列信息的SelectCommand不支持UpdateCommand的动态 SQL 生成!”。

  21. 10.3.5 DataSet对象 • Clear: • 该方法用来清除DataSet对象中所有的表 • 删除DataSet对象中存储的所有数据 • 释放DataSet对象

  22. 10.3.5 DataSet对象 • 【例10.1】使用有关DataSet对象的方法,实现以下程序功能: • (1)将两个数据源(对应数据库MyDatabase中的表student和表teacher)的数据分别填充到DataSet对象中,形成该对象中的两个表t1和表t2; • (2)提取t1的所有字段名以及t1中所有的数据项,并显示在listBox1控件中; • (3)将t2绑定到dataGridView1控件并显示t2中的数据,同时将表t2中的字段t_name绑定到textBox1并显示该字段的数据项。

  23. 程序运行结果 :

  24. 【例10.1】 • 创建步骤如下: (1)创建窗体应用程序DataSetApp,在窗体上添加Button、TextBox、DataGridView和ListBox,并适当设置它们的属性、位置和大小:

  25. 【例10.1】 (2)编写代码(以下是核心代码): private void button1_Click(object sender, EventArgs e) { SqlConnection conn = null; SqlDataAdapter DataAdapter = null; DataSet dataset = null; try { string ConnectionString = "Data Source=mzq; "+ "Initial Catalog=MyDatabase;Persist Security Info=True; "+ "User ID=sa;Password=sql2008"; conn = newSqlConnection(ConnectionString); conn.Open(); DataAdapter = new SqlDataAdapter(); dataset = new DataSet(); SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; cmd.CommandText = "SELECT * FROM student"; DataAdapter.SelectCommand = cmd; DataAdapter.Fill(dataset, "t1"); //第一次填充

  26. 【例10.1】 cmd.CommandText = "SELECT * FROM teacher"; DataAdapter.SelectCommand = cmd; DataAdapter.Fill(dataset, "t2"); //第二次填充 string s = " "; //获取表t1中的所有列名 for (int i = 0; i < dataset.Tables["t1"].Columns.Count; i++) s += dataset.Tables["t1"].Columns[i].ToString() + "\t"; listBox1.Items.Add(s); //提取表t1中的数据项 for (int i = 0; i < dataset.Tables[0].Rows.Count; i++) { DataRow dr = dataset.Tables[0].Rows[i]; s = ""; for (int j = 0; j < dataset.Tables[0].Columns.Count; j++) { s += dr[j].ToString() + "\t"; } listBox1.Items.Add(s); }

  27. 【例10.1】 //将表t2中的字段t_name绑定到textBox1 textBox1.DataBindings.Add("Text", dataset, "t2.t_name"); //将dataset绑定到dataGridView1 dataGridView1.DataSource = dataset; //在dataGridView1中显示表t2中的数据 dataGridView1.DataMember = "t2"; } catch (Exception ex) { MessageBox.Show(ex.Message); } finally { if (conn != null) conn.Dispose(); if (dataset != null) dataset.Dispose(); if (DataAdapter != null) DataAdapter.Dispose(); } } }

  28. 数据库应用程序开发步骤 数据库应用程序开发的步骤如下: 1. 初步设计(总体设计、详细设计) 根据用户的需求,定义数据库和应用程序的功能 2. 功能实现 将客户需求功能分成几个合理的功能块,分别进行程序设计、调试 3. 运行和维护程序 根据用户的建议和要求对数据库应用程序进行适当的修改和完善,从而提高程序的性能

  29. 创建ADO.NET数据库应用程序的步骤 创建一个ADO.NET数据库应用程序的一般步骤: ①创建Connection对象,连接数据库。创建Command对象,执行SQL命令 ②创建DataAdapter对象,提供数据源与记录集之间的数据交换,数据库与内存中的数据交换 ③创建DataSet对象,将从数据源中得到的数据保存在内存中,并对数据进行各种操作等 ④创建Windows窗体,并向其中添加必要的控件,设置各控件的属性 ⑤编写主要控件的事件代码,实现程序的功能

  30. 本讲结束,谢谢!

More Related