用DataGridView显示和操作数据库2回顾//command是一个有效的Command对象SqlDataReaderdataReader=command.ExecuteReader();if(dataReader.HasRows){studentName=dataReader[0];}dataReader.Close();缺少dataReader.Read();没有类型转换(string)dataReader[0];3预习检查•DataSet对象的作用是什么?•DataAdapter对象的作用是什么?•DataGridView控件的作用是什么?4本章任务•MySchool系统的用户管理模块–实现批量查看和修改教员信息功能–实现批量查看、筛选和修改学员信息功能5本章目标•了解数据集(DataSet)的结构•会使用数据适配器填充数据集•会使用数据适配器将数据集的修改提交到数据库•掌握DataGridView控件的使用6为什么使用DataSet对象应用程序大量的数据来自多个数据源•大批量的查询、修改数据怎么办?•想在断开数据库连接的情况下操所数据怎么办?使用DataSet对象DataSet数据库7什么是DataSet对象•DataSet数据集–简单理解为一个临时数据库–将数据源的数据保存在内存中–独立于任何数据库工厂的仓库车间的临时仓库生产线数据源DataSet应用程序驻留于内存,临时存储数据类似的关系8DataSet的结构2-1DataSet的基本结构DataSetDataTableDataColumnCollectionDataRowCollectionDataColumnDataRowDataTableCollection数据集数据表的集合数据表数据列的集合数据行的集合数据列数据行9DataSet的结构2-2GradeTableClassTableStudentTableidnameclasssex1小菲5女2小薇3女3小强6男DataTableCollection数据表集合DataTable数据表DataRowCollection数据行集合DataRow数据行DataColumnCollection数据列集合DataColumn数据列10数据集的工作原理数据集发送数据修改数据集传递数据提交修改后的数据请求数据客户端11如何创建DataSet对象•创建一个DataSet–可以指定一个数据集的名称–如果不指定名称,则默认被设为NewDataSetDataSetdataSet=newDataSet();DataSetdataSet=newDataSet(MySchool);DataSet数据集对象=newDataSet(数据集的名称字符串);可选的12为什么使用DataAdapter•如何将数据库的数据放在DataSet中?DataSet数据集数据库DataSet数据集Connection数据库连接DataAdapter数据适配器数据库13DataAdapter对象•不同命名空间的DataAdapter对象命名空间对应的DataAdapter对象System.Data.SqlClientSqlDataAdapterSystem.Data.OleDbOleDbDataAdapterSystem.Data.OdbcOdbcDataAdapterSystem.Data.OracleClientOracleDataAdapter14如何填充数据集•使用DataAdapter对象填充数据集DataSet数据集使用Fill()方法填充DataSet中的表使用Connection连接数据源Connection数据库DataAdapter的Fill()方法15填充数据集演示示例1:查看教师信息窗体——填充数据集,打印部分内容SqlDataAdapter对象名=newSqlDataAdapter(查询用sql语句,数据库连接);创建SqlDataAdapter对象1DataAdapter对象.Fill(数据集对象,数据表名称字符串);填充DataSet216如何保存DataSet中的数据•把数据集中修改过的数据提交到数据源DataSet数据集数据库dataAdapter.Update(dataSet,Teacher);DataAdapter的Update()方法调用前,要先设置更新需要的相关命令可以使用SqlCommandBuilder对象Connection17SqlCommandBuilder对象•利用SqlCommandBuilder对象能够自动生成:–INSERT命令–UPDATE命令–DELETE命令SqlCommandBuilderbuilder=newSqlCommandBuilder(已创建的DataAdapter对象);18保存DataSet中的数据自动生成用于更新的相关命令1将DataSet的数据提交到数据源2SqlCommandBuilderbuilder=newSqlCommandBuilder(dataAdapter);dataAdapter.Update(dataSet,Teacher);•步骤:SqlCommandBuilderbuilder=newSqlCommandBuilder(已创建的DataAdapter对象);DataAdapter对象.Update(数据集对象,数据表名称字符串);19DataAdapter对象小结•DataAdapter的主要属性和方法属性说明SelectCommand从数据库检索数据的Command对象方法说明Fill向DataSet中的表填充数据Update将DataSet中的数据提交到数据库20小结•使用什么方法填充DataSet?•DataAdapter的作用是什么?•使用什么方法将DataSet中数据提交到数据库?21为什么使用DataGridView•怎样显示DataSet中的数据呢?数据集使用DataGridView22DataGridView控件•DataGridView控件强大而灵活地显示数据轻松定义控件外观像Excel表格一样方便一行代码实现数据绑定可视化操作23使用DataGridView显示数据•示例1已经填充了DataSet,如何在窗体中显示教师信息?•使用DataGridView显示数据•指定DataGridView的数据源——DataSource属性24使用DataGridView显示数据•实现步骤:–添加窗体的控件–设置DataGridView控件和其中各列的属性–设置DataSource属性,指定数据源dgvTeacher.DataSource=dataSet.Tables[Teacher];演示示例2:使用DataGridView显示数据25DataGridView控件重要属性•DataGridView的重要属性属性说明Columns包含的列的集合DataSourceDataGridView的数据源ReadOnly是否可以编辑单元格在其中编辑DataGridView列的属性26列的主要属性小结•DataGridView中各列的主要属性属性说明DataPropertyName绑定的数据列的名称HeaderText列标题文本Visible指定列是否可见Frozen指定水平滚动DataGridView时列是否移动ReadOnly指定单元格是否为只读27通过DataGridView修改数据•把修改过的教师信息保存到数据库•使用DataAdapter的Update()方法注意:将DataGridView和相应列的ReadOnly属性设为False28通过DataGridView修改数据•实现步骤:–处理“保存修改”按钮的Click事件–编写事件处理程序SqlCommandBuilderbuilder=newSqlCommandBuilder(dataAdapter);dataAdapter.Update(dataSet,Teacher);演示示例3:通过DataGridView修改数据29小结使用DataGridView的什么属性指定数据源?在示例3中增加“刷新”按钮,实现刷新功能//当点击“刷新”按钮时,重新填充数据集privatevoidbtnReFill_Click(objectsender,EventArgse){dataSet.Tables[Teacher].Clear();//清空原来的数据dataAdapter.Fill(dataSet,Teacher);//填充数据集}查看源代码30综合示例•批量查看和修改——使用DataSet•填充数据集、更新数据库——使用DataAdapter•显示数据——使用DataGridView•MySchool学员信息的批量查看和修改功能•按照性别筛选显示的数据演示示例4:演示批量查看和修改学员功能31ADO.NET小结数据库.NET数据提供程序Connection对象Command对象DataReader对象DataAdapter对象内存DataSetExecuteReader()Read()Fill()Update()ExecuteScalar()ExecuteNonQuery()应用程序32总结•ADO.NET的两大组成部分是什么?•每个核心对象的作用是什么?•.NET数据提供程序包括哪几个核心对象?33