《C程序设计 第五章 数据库程序设计.ppt》由会员分享,可在线阅读,更多相关《C程序设计 第五章 数据库程序设计.ppt(66页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、C#程序设计与案例教程清华大学出版社第五章第五章 数据库程序设计数据库程序设计数据库应用在程序设计中占用重要的地位,数据库应用在程序设计中占用重要的地位,C#C#通过通过ADO.NETADO.NET来支持对数据库的操作。来支持对数据库的操作。ADO.NETADO.NET是是ADOADO的升级版本。在的升级版本。在ADO.NETADO.NET中,中,通过数据提供程序所提供的应用程序编程接口通过数据提供程序所提供的应用程序编程接口(APIAPI),可以轻松地访问数据库资源。),可以轻松地访问数据库资源。1 1版权所有版权所有C#程序设计与案例教程清华大学出版社目录n nADO.NETADO.NET
2、概述概述n n数据库的连接数据库的连接n n直接访问模式直接访问模式n n数据集模式数据集模式n n参数查询与存储过程调用参数查询与存储过程调用n n图像的读取和保存图像的读取和保存n n读写读写XMLXML文件文件 2 2版权所有版权所有C#程序设计与案例教程清华大学出版社5.1 ADO.NET概述概述n nADO.NETADO.NET是一组向是一组向.NET.NET程序员公开数据访问程序员公开数据访问服务的类。服务的类。ADO.NETADO.NET为创建分布式数据共享应为创建分布式数据共享应用程序提供了一组丰富的组件。它提供了对关用程序提供了一组丰富的组件。它提供了对关系数据、系数据、XM
3、LXML和应用程序数据的访问,因此是和应用程序数据的访问,因此是.NETFramework.NETFramework中不可缺少的一部分。中不可缺少的一部分。ADO.NETADO.NET支持多种开发需求,包括创建由应支持多种开发需求,包括创建由应用程序、工具、语言或用程序、工具、语言或 InternetInternet浏览器使用的浏览器使用的前端数据库客户端和中间层业务对象。前端数据库客户端和中间层业务对象。3 3版权所有版权所有C#程序设计与案例教程清华大学出版社4 4版权所有版权所有C#程序设计与案例教程清华大学出版社1.NET Framework 数据提供程序数据提供程序n n.NETFr
4、amework.NETFramework数据提供程序用于连接到数数据提供程序用于连接到数据库、执行命令和检索结果。据库、执行命令和检索结果。n n.NETFramework.NETFramework提供了四个提供了四个.NETFramework.NETFramework数据提供程序:数据提供程序:SQLServer.NETFrameworkSQLServer.NETFramework数据提供程序数据提供程序 OLEDB.NETFrameworkOLEDB.NETFramework数据提供程序数据提供程序 ODBC.NETFrameworkODBC.NETFramework数据提供程序数据提供程
5、序 Oracle.NETFrameworkOracle.NETFramework数据提供程序数据提供程序 5 5版权所有版权所有C#程序设计与案例教程清华大学出版社2.DataSetn nDataSetDataSet 对象是支持对象是支持 ADO.NETADO.NET的断开式、分的断开式、分布式数据方案的核心对象。布式数据方案的核心对象。DataSetDataSet 是数据的是数据的内存驻留表示形式,无论数据源是什么,它都内存驻留表示形式,无论数据源是什么,它都会提供一致的关系编程模型。它可以用于多个会提供一致的关系编程模型。它可以用于多个不同的数据源,用于不同的数据源,用于 XMLXML数据
6、,或用于管理数据,或用于管理应用程序本地的数据。应用程序本地的数据。DataSetDataSet 表示包括相关表示包括相关表、约束和表间关系在内的整个数据集。表、约束和表间关系在内的整个数据集。6 6版权所有版权所有C#程序设计与案例教程清华大学出版社5.1.2 数据访问模式与策略1 1数据访问模式数据访问模式数据访问模式数据访问模式ADO.NETADO.NET提供两种数据访问模式:直接访问模提供两种数据访问模式:直接访问模式(连接)和数据集模式(非连接)。式(连接)和数据集模式(非连接)。2 2数据访问策略数据访问策略数据访问策略数据访问策略 7 7版权所有版权所有C#程序设计与案例教程清华
7、大学出版社5.1.3 使用ADO.NET访问数据库的一般步骤n n根据使用的数据源,确定使用根据使用的数据源,确定使用.NET.NET框架数据框架数据提供程序。提供程序。n n建立与数据源的连接,需要使用建立与数据源的连接,需要使用ConnectionConnection对象。对象。n n执行对数据源的操作命令,通常是执行对数据源的操作命令,通常是SQLSQL命令,命令,需要使用需要使用CommandCommand对象。对象。n n使用数据集对获得的数据进行操作,需要使使用数据集对获得的数据进行操作,需要使用用DataReaderDataReader、DataSetDataSet等。等。n n
8、向用户显示数据,需要使用数据控件。向用户显示数据,需要使用数据控件。8 8版权所有版权所有C#程序设计与案例教程清华大学出版社5.2 数据库的连接数据库的连接5.2.1 数据库连接的方法n n在在ADO.NETADO.NET中,可以使用中,可以使用ConnecitonConneciton对象连接对象连接到数据库。根据数据源的不同,连接对象有四到数据库。根据数据源的不同,连接对象有四种:种:SqlConnecitonSqlConneciton、OleDbConnecitonOleDbConneciton、OdbcConnecitonOdbcConneciton和和OracleConneciton
9、OracleConneciton。连接对。连接对象的最主要属性是象的最主要属性是ConnectionStringConnectionString,用于设,用于设置连接字符串。对于不同的置连接字符串。对于不同的ConnectionConnection对象,对象,其连接字符串也有所不同。其连接字符串也有所不同。9 9版权所有版权所有C#程序设计与案例教程清华大学出版社例如:例如:OleDbConnectionOleDbConnection myConnectionmyConnection=new=newOleDbConnectionOleDbConnection();();myConnection
10、.ConnectionStringmyConnection.ConnectionString=Driver=Micros=Driver=MicrosoftAccessDriver(*.oftAccessDriver(*.mdbmdb);DBQ=);DBQ=c:binnwind.mdbc:binnwind.mdb 或或OleDbConnectionOleDbConnection myConnectionmyConnection=new=newOleDbConnectionOleDbConnection();();myConnection.ConnectionStringmyConnection.
11、ConnectionString=DSN=DSN=dsnnamdsnname e 1010版权所有版权所有C#程序设计与案例教程清华大学出版社实例实例实例实例5-15-1连接数据库。连接数据库。n n建立一个建立一个WindowsWindows应用程应用程序,窗体上放置一个按钮,序,窗体上放置一个按钮,单击按钮时连接单击按钮时连接SQLSQLServerServer中的中的NorthwindNorthwind数据数据库,连接成功,弹出对话库,连接成功,弹出对话框,显示框,显示“已正确建立连已正确建立连接接”,否则显示错误信息。,否则显示错误信息。1111版权所有版权所有C#程序设计与案例教程清
12、华大学出版社5.3直接访问模式5.3.1数据命令n n数据命令对象可直接执行的数据命令对象可直接执行的 SQLSQL语句或存储语句或存储过程,是过程,是 OleDbCommandOleDbCommand、SqlCommandSqlCommand、OdbcCommandOdbcCommand 或或 OracleCommandOracleCommand 类以及其类以及其他类似类的实例。他类似类的实例。OleDbCommandOleDbCommand 类可用于类可用于任何任何 OLEDBOLEDB提供程序,提供程序,SqlCommandSqlCommand 类进类进行优化以便用于行优化以便用于 SQ
13、LServer7.0SQLServer7.0或更高版本,或更高版本,OdbcCommandOdbcCommand 类用于类用于 ODBCODBC数据源,数据源,OracleCommandOracleCommand 类用于类用于 OracleOracle数据库。数据库。1212版权所有版权所有C#程序设计与案例教程清华大学出版社使用数据命令访问数据库的基本步骤是:(1)建立数据命令对象。(2)设置数据命令对象的属性。(3)执行命令。(4)关闭有关对象,释放资源。1313版权所有版权所有C#程序设计与案例教程清华大学出版社5.3.2 DataReader对象1 1DataReaderDataRea
14、der的基本用法的基本用法的基本用法的基本用法 DataReaderDataReader对象是一个简单的数据集,用于对象是一个简单的数据集,用于对象是一个简单的数据集,用于对象是一个简单的数据集,用于从数据源中检索只读、只向前数据集,常用于从数据源中检索只读、只向前数据集,常用于从数据源中检索只读、只向前数据集,常用于从数据源中检索只读、只向前数据集,常用于检索大量数据。检索大量数据。检索大量数据。检索大量数据。1414版权所有版权所有C#程序设计与案例教程清华大学出版社主要的属性和方法有:主要的属性和方法有:n nFieldCountFieldCount属性。获取当前行中的列数。属性。获取当
15、前行中的列数。n nRecordsAffectedRecordsAffected属性。被更改、插入或删除的行数。属性。被更改、插入或删除的行数。n nIsClosedIsClosed属性。指示是否可关闭数据读取器。属性。指示是否可关闭数据读取器。n nCloseClose方法。关闭方法。关闭DataReaderDataReader对象。对象。n nGetNameGetName方法。获取指定列的名称。参数为列号。方法。获取指定列的名称。参数为列号。n nGetOrdinalGetOrdinal方法。在给定列名称的情况下获取列序号。方法。在给定列名称的情况下获取列序号。参数为列名。参数为列名。n
16、nGetXXXGetXXX方法。用于读取数据集的当前行的某一列的数方法。用于读取数据集的当前行的某一列的数据。参数为列号。据。参数为列号。n nNextResultNextResult方法。当读取批处理方法。当读取批处理 SQLSQL语句的结果时,语句的结果时,使数据读取器前进到下一个结果。在查询多表时,很使数据读取器前进到下一个结果。在查询多表时,很有用。多表之间的有用。多表之间的SQLSQL语句用分号分隔。语句用分号分隔。n nReadRead方法。使方法。使OleDbDataReaderOleDbDataReader 前进到下一条记录。前进到下一条记录。1515版权所有版权所有C#程序设
17、计与案例教程清华大学出版社【案例案例案例案例5-25-2】显示课程显示课程(CourseCourse)数据表中的)数据表中的数据。数据。n n建立一个建立一个WindowsWindows应用应用程序,读取程序,读取 SQLSQLServer2000Server2000中中xsglxsgl 数数据库的据库的CourseCourse表中的表中的记录,将作者的号码、记录,将作者的号码、名和性显示在文本框中。名和性显示在文本框中。1616版权所有版权所有C#程序设计与案例教程清华大学出版社2获取多个结果集获取多个结果集n n如果返回的是多个结果集,如果返回的是多个结果集,DataReaderDataR
18、eader会提供会提供NextResultNextResult()()方法来按顺序循环访问这些结果集。方法来按顺序循环访问这些结果集。1717版权所有版权所有C#程序设计与案例教程清华大学出版社3从从DataReader中获取架构信息中获取架构信息n n当当 DataReaderDataReader打开时,可以使用打开时,可以使用GetSchemaTableGetSchemaTable方法检索有关当前结果集的方法检索有关当前结果集的架构信息。架构信息。GetSchemaTableGetSchemaTable将返回一个填充将返回一个填充了行和列的了行和列的 DataTableDataTable
19、对象,这些行和列包含对象,这些行和列包含当前结果集的架构信息。对于结果集的每一列,当前结果集的架构信息。对于结果集的每一列,DataTableDataTable 都将包含一行。架构表行的每一列都将包含一行。架构表行的每一列都映射到在结果集中返回的列的属性,其中都映射到在结果集中返回的列的属性,其中ColumnNameColumnName是属性的名称,而列的值为属性是属性的名称,而列的值为属性的值。以下代码示例利用的值。以下代码示例利用DataReaderDataReader对象读取对象读取架构信息。架构信息。1818版权所有版权所有C#程序设计与案例教程清华大学出版社5.3.3 5.3.3 执
20、行更新数据库的命令执行更新数据库的命令 n n可针对数据库执行不返回结果集的命令,这些命令类可针对数据库执行不返回结果集的命令,这些命令类型包括:型包括:n n数据库定义数据库定义(DDL)(DDL)命令,用于创建和管理数据库结构命令,用于创建和管理数据库结构(如表和存储过程)。(如表和存储过程)。n n更新命令(更新命令(“更新更新”(Update)(Update)、“插入插入”(Insert)(Insert)和和“删除删除”(Delete)(Delete)语句)。语句)。n n对于这两种类型的命令,都需要调用对于这两种类型的命令,都需要调用ExecuteNonQueryExecuteNon
21、Query()()方法,而且返回一个整数指示操作的成功与否。返回方法,而且返回一个整数指示操作的成功与否。返回值因是要更新记录还是发出值因是要更新记录还是发出 DDLDDL命令而异:命令而异:n n如果要创建或修改数据库结构,当操作成功时返回值如果要创建或修改数据库结构,当操作成功时返回值为为-1-1。n n如果要更新记录,则返回值指示受到该操作影响的记如果要更新记录,则返回值指示受到该操作影响的记录数。录数。1919版权所有版权所有C#程序设计与案例教程清华大学出版社【案例案例案例案例5-3 5-3】创建表。创建表。n n建立一个建立一个WindowsWindows程序,程序,窗体上放置一个
22、按钮,窗体上放置一个按钮,单击按钮将在单击按钮将在SQLSQLServer2000Server2000的的xsglxsgl数数据库中建立一个新的表,据库中建立一个新的表,表名为表名为“Major”Major”,包,包含两个字段:含两个字段:majorIDmajorID和和majorNamemajorName。2020版权所有版权所有C#程序设计与案例教程清华大学出版社【案例案例案例案例5-4 5-4】学生数据维学生数据维护。护。n n建立一个建立一个WindowsWindows程序,程序,窗体上放置窗体上放置5 5个标签,个标签,一个列表视图控件、一个列表视图控件、5 5个文本框和个文本框和3
23、 3个按钮。个按钮。能够对能够对SQLServerSQLServer20002000中的中的xsglxsgl数据库数据库的的 studentstudent表浏览、添表浏览、添加修改、删除记录。加修改、删除记录。2121版权所有版权所有C#程序设计与案例教程清华大学出版社5.4数据集模式n nVisualStudio.NETVisualStudio.NET应用程序中数据访问的常应用程序中数据访问的常见模型是在数据集中存储数据并使用数据适配见模型是在数据集中存储数据并使用数据适配器读取和写入数据库中的数据。数据集在断开器读取和写入数据库中的数据。数据集在断开缓存中存储数据。数据集的结构类似于关系数
24、缓存中存储数据。数据集的结构类似于关系数据库的结构;它公开表、行和列的分层对象模据库的结构;它公开表、行和列的分层对象模型。另外,它包含为数据集定义的约束和关系。型。另外,它包含为数据集定义的约束和关系。2222版权所有版权所有C#程序设计与案例教程清华大学出版社5.4.1 DataSet对象n nDataSetDataSet是数据的一种内存驻留表示形式,无是数据的一种内存驻留表示形式,无论它包含的数据来自什么数据源,它都会提供论它包含的数据来自什么数据源,它都会提供一致的关系编程模型。一个一致的关系编程模型。一个DataSetDataSet 表示整个表示整个数据集,其中包含对数据进行包含、排
25、序和约数据集,其中包含对数据进行包含、排序和约束的表以及表间的关系。束的表以及表间的关系。2323版权所有版权所有C#程序设计与案例教程清华大学出版社1.1.与数据集有关的对象与数据集有关的对象与数据集有关的对象与数据集有关的对象ADO.NETADO.NET中与数据集有关的对象包括中与数据集有关的对象包括DataSetDataSet(数据集)、(数据集)、DataTableDataTable(数据表)、(数据表)、DataColumnDataColumn(列)、(列)、ConstraintConstraint(约束)、(约束)、DataRelationDataRelation(关系)、(关系)
26、、DataRowDataRow(数据行)。(数据行)。DataSetDataSet 类包含数据表的类包含数据表的 TablesTables集合和集合和 DataRelationDataRelation 对象的对象的 RelationsRelations集合。集合。DataTableDataTable 类包含表行的类包含表行的 RowsRows集合、数据列的集合、数据列的 ColumnsColumns集集合和数据关系的合和数据关系的 ChildRelationsChildRelations 和和 ParentRelationsParentRelations 集合。集合。DataRowDataRo
27、w 类包含类包含 RowStateRowState 属性,该属性的值指示自数据表首次从属性,该属性的值指示自数据表首次从数据库加载后,行是否已更改以及是如何更改的。数据库加载后,行是否已更改以及是如何更改的。RowStateRowState 属性的可能值包括属性的可能值包括 DeletedDeleted、ModifiedModified、NewNew和和 UnchangedUnchanged。2424版权所有版权所有C#程序设计与案例教程清华大学出版社2.2.创建数据集对象创建数据集对象创建数据集对象创建数据集对象以通过调用以通过调用DataSetDataSet构造函数来创建构造函数来创建Da
28、taSetDataSet 的实的实例。请指定一个可选名称参数。如果没有为例。请指定一个可选名称参数。如果没有为DataSetDataSet指定名称,则该名称会设置为指定名称,则该名称会设置为“NewDataSetNewDataSet”。DataSetDataSet custDScustDS=new=newDataSet(CustomerOrdersDataSet(CustomerOrders););2525版权所有版权所有C#程序设计与案例教程清华大学出版社3 3填充数据集填充数据集填充数据集填充数据集数据集是容器,因此需要用数据填充它。填充数据数据集是容器,因此需要用数据填充它。填充数据集时
29、,将引发各种事件,应用约束检查,等等。集时,将引发各种事件,应用约束检查,等等。可以用多种方法填充数据集:可以用多种方法填充数据集:(1 1)调用数据适配器()调用数据适配器(DataAdapterDataAdapter)对象的)对象的 FillFill方法。这导致适配器执行方法。这导致适配器执行 SQLSQL语句或存储过程,语句或存储过程,然后将结果填充到数据集中的表中。如果数据集然后将结果填充到数据集中的表中。如果数据集包含多个表,每个表可能有单独的数据适配器,包含多个表,每个表可能有单独的数据适配器,因此必须分别调用每个适配器的因此必须分别调用每个适配器的 FillFill方法。方法。(
30、2 2)通过创建)通过创建DataRowDataRow 对象并将它们添加到表的对象并将它们添加到表的RowsRows集合,手动填充数据集中的表。集合,手动填充数据集中的表。(3 3)将)将 XMLXML文档或流读入数据集。文档或流读入数据集。(4 4)合并(复制)另一个数据集的内容。)合并(复制)另一个数据集的内容。2626版权所有版权所有C#程序设计与案例教程清华大学出版社4 4访问数据访问数据访问数据访问数据数据集是断开式的数据容器,没有当前记录的概数据集是断开式的数据容器,没有当前记录的概念,也不存在记录导航的概念,数据集中的所有念,也不存在记录导航的概念,数据集中的所有记录可以随机访问
31、。记录可以随机访问。ADO.NETADO.NET使用对象访问数据集中的数据表、数据使用对象访问数据集中的数据表、数据行和列。数据集包含数据表的集合,数据表包含行和列。数据集包含数据表的集合,数据表包含数据行和列的集合,即数据行和列的集合,即DataSetDataSet对象包含数据表的对象包含数据表的集合集合TablesTables,而,而DataTableDataTable对象包含数据行的集合对象包含数据行的集合RowsRows、数据列的集合、数据列的集合ColumnsColumns。因此可以直接使。因此可以直接使用这些对象访问数据集中的数据。例如,访问用这些对象访问数据集中的数据。例如,访问
32、studentstudent数据表的第三行的数据表的第三行的stud_namestud_name列的值,可列的值,可以使用以下语句:以使用以下语句:myDS.Tablesstudent.Rows2studName;myDS.Tablesstudent.Rows2studName;2727版权所有版权所有C#程序设计与案例教程清华大学出版社也可以使用以下语句:也可以使用以下语句:myDs.Tablesstudent.Rows3.ItemArray1;myDs.Tablesstudent.Rows3.ItemArray1;myDs.Tablesstudent.RowsijmyDs.Tablesst
33、udent.Rowsij myDs.Tablesstudent.Rows.countmyDs.Tablesstudent.Rows.count myDs.Tablesstudent.ColumnsK.ColumnNamemyDs.Tablesstudent.ColumnsK.ColumnName;2828版权所有版权所有C#程序设计与案例教程清华大学出版社5.5.数据表的操作数据表的操作数据表的操作数据表的操作DataSetDataSet类的类的TablesTables属性是一个包含数据表的集合,它所存属性是一个包含数据表的集合,它所存储的是储的是DataTableDataTable类对象。类
34、对象。DataTableDataTable类用于数据表的字段类用于数据表的字段(列)和记录(行)的操作。(列)和记录(行)的操作。(1 1)添加表)添加表DataSetDataSet custDScustDS=new=newDataSet(CustomersOrdersDataSet(CustomersOrders););DataTableDataTable ordersTableordersTable=custDS.Tables.Add(OrderscustDS.Tables.Add(Orders););DataColumnDataColumn pkColpkCol=ordersTable.
35、Columns.Add(OrderID,typeof(Int32)=ordersTable.Columns.Add(OrderID,typeof(Int32););ordersTable.Columns.Add(OrderQuantity,typeof(Int32);ordersTable.Columns.Add(OrderQuantity,typeof(Int32);ordersTable.Columns.Add(CompanyName,typeof(stringordersTable.Columns.Add(CompanyName,typeof(string););ordersTable.
36、PrimaryKeyordersTable.PrimaryKey=new=newDataColumnpkColDataColumnpkCol;2929版权所有版权所有C#程序设计与案例教程清华大学出版社(2 2)字段操作)字段操作 DataTableDataTable类的类的ColumnsColumns属性是一个包含数据表的列的集合,它所存属性是一个包含数据表的列的集合,它所存储的是储的是DataColumnDataColumn对象。对象。DataSetDataSet dsds=new=newDatasSetDatasSet();();DataTableDataTable myTablemyT
37、able=ds.Tables.Add(Productds.Tables.Add(Product););DataColumnDataColumn myColumnmyColumn=new=newDataColumnDataColumn();();myColumn.DataTypemyColumn.DataType=System.Type.GetType(System.DecimalSystem.Type.GetType(System.Decimal););myColumn.AllowDBNullmyColumn.AllowDBNull=false;=false;myColumn.Captionm
38、yColumn.Caption=Price;=Price;myColumn.ColumnNamemyColumn.ColumnName=Price;=Price;myColumn.DefaultValuemyColumn.DefaultValue=25;=25;myTable.Columns.Add(myColumnmyTable.Columns.Add(myColumn););DataRowDataRow myRowmyRow;for(intfor(inti=0;i10;i+)i=0;i10;i+)myRowmyRow=myTable.NewRowmyTable.NewRow();();my
39、RowPricemyRowPrice=i+1;=i+1;myTable.Rows.Add(myRowmyTable.Rows.Add(myRow););3030版权所有版权所有C#程序设计与案例教程清华大学出版社(3 3)行操作)行操作添加记录行添加记录行向数据集中添加数据,实际上就是对某个数据表添加一个新向数据集中添加数据,实际上就是对某个数据表添加一个新行。具体步骤如下:行。具体步骤如下:第一步:建立一个新的空数据行:第一步:建立一个新的空数据行:DataRowDataRow myDRmyDR=myDS.Tablesstudent.NewRowmyDS.Tablesstudent.NewR
40、ow();();第二步:向数据行中写如数据:第二步:向数据行中写如数据:myDRstudIDmyDRstudID=20040209=20040209;myDRstudNamemyDRstudName=李大力李大力;myDRstudSexmyDRstudSex=男男;myDRstudAddressmyDRstudAddress=自动化自动化;myDRenderScoremyDRenderScore=546;=546;第三步:把数据行添加到数据表中:第三步:把数据行添加到数据表中:myDS.Tablesstudent.Rows.Add(myDRmyDS.Tablesstudent.Rows.Add
41、(myDR););3131版权所有版权所有C#程序设计与案例教程清华大学出版社n n删除记录行删除记录行删除数据只调用数据行的删除数据只调用数据行的DeleteDelete方法即可,例如:方法即可,例如:myDS.Tablesstudent.Rows10.Delete();/myDS.Tablesstudent.Rows10.Delete();/删除删除studentstudent表中的第表中的第1111行。行。n n修改记录行修改记录行将数据直接写如相应的位置,如:将数据直接写如相应的位置,如:myDS.Tablesstudent.Rows3stud_name=myDS.Tablesstud
42、ent.Rows3stud_name=王小力王小力;n n查找记录行查找记录行myDS.Tablesstudent.Rows.findmyDS.Tablesstudent.Rows.find(王小力王小力);/find);/find方方法只能查找主键。法只能查找主键。3232版权所有版权所有C#程序设计与案例教程清华大学出版社(4 4)更新数据源)更新数据源数据集的操作是在内存中完成的,更新后的数数据集的操作是在内存中完成的,更新后的数据集要写回到数据源中,才能永久保存。可以据集要写回到数据源中,才能永久保存。可以调用数据适配器的调用数据适配器的UpdateUpdate方法完成此工作。它方法完
43、成此工作。它检查数据表中的每一行,如果有更改的行,就检查数据表中的每一行,如果有更改的行,就将该行更新到数据源中。例如:将该行更新到数据源中。例如:myDA.Update(myDSmyDA.Update(myDS););myDA.Update(myDS,studentmyDA.Update(myDS,student);/);/指明更新指明更新studentstudent表。表。3333版权所有版权所有C#程序设计与案例教程清华大学出版社5.4.2 数据适配器(DataAdapter)n n数据适配器是数据适配器是DataSetDataSet和数据源之间的一个桥和数据源之间的一个桥梁。梁。Dat
44、aAdapterDataAdapter对象用于从数据源中检索数对象用于从数据源中检索数据并填充据并填充 DataSetDataSet 中的表。中的表。DataAdapterDataAdapter 还会还会将对将对 DataSetDataSet 作出的更改解析回数据源。作出的更改解析回数据源。DataAdapterDataAdapter 使用使用.NETFramework.NETFramework数据提供数据提供程序的程序的 ConnectionConnection对象连接到数据源,使用对象连接到数据源,使用 CommandCommand对象从数据源中检索数据并将更改对象从数据源中检索数据并将更
45、改解析回数据源。解析回数据源。3434版权所有版权所有C#程序设计与案例教程清华大学出版社n nDataAdapterDataAdapter 的的 SelectCommandSelectCommand 属性是一个属性是一个 CommandCommand对象,它从数据源中检索数据。对象,它从数据源中检索数据。DataAdapterDataAdapter 的的 InsertCommandInsertCommand、UpdateCommandUpdateCommand 和和 DeleteCommandDeleteCommand 属性也属性也是是 CommandCommand对象,它们按照对对象,它们
46、按照对 DataSetDataSet 中数中数据的修改来管理对数据源中数据的更新。据的修改来管理对数据源中数据的更新。3535版权所有版权所有C#程序设计与案例教程清华大学出版社1 1建立建立建立建立DataAdapterDataAdapter以以SqlDataAdapterSqlDataAdapter为例,有如下构造函数:为例,有如下构造函数:publicpublicSqlDataAdapterSqlDataAdapter()():初始化:初始化 SqlDataAdapterSqlDataAdapter类的类的新实例。新实例。publicpublicSqlDataAdapter(SqlCom
47、mandSqlDataAdapter(SqlCommand):指定的:指定的 SqlCommandSqlCommand作为作为 SelectComSelectCommandmand属性,初始化属性,初始化 SqlDataAdapterSqlDataAdapter类的新实例。类的新实例。publicpublicSqlDataAdapter(stringSqlDataAdapter(string,SqlConnectionSqlConnection):使用:使用 SelectCommandSelectCommand和和SqlConSqlConnectionnection对象初始化对象初始化 Sql
48、DataAdapterSqlDataAdapter类的新实例。类的新实例。publicpublicSqlDataAdapter(stringSqlDataAdapter(string,string),string):用:用SelectCommandSelectCommand和一个连接字符串初始化和一个连接字符串初始化 SqlDataAdapterSqlDataAdapter类的新实例。类的新实例。3636版权所有版权所有C#程序设计与案例教程清华大学出版社2.DataAdapter对象的属性设置对象的属性设置在建立在建立SqlDataAdapterSqlDataAdapter对象时,可以直接指
49、定与对象时,可以直接指定与 SqlConnectionSqlConnection和和 SqlCommandSqlCommand。如果过后指。如果过后指定属性,主要有定属性,主要有SelectCommandSelectCommand、InsertCommandInsertCommand、DeleteCommandDeleteCommand和和UpdateCommandUpdateCommand 属性。属性。例如:例如:sqlDataAdapter.SelectCommandsqlDataAdapter.SelectCommand=sqlCommandsqlCommand;/;/sqlDataAd
50、aptersqlDataAdapter为为DataAdapterDataAdapter对象,对象,sqlCommandsqlCommand为执行为执行SelectSelect语句的命令对象。语句的命令对象。3737版权所有版权所有C#程序设计与案例教程清华大学出版社3用用DataAdapter 填充填充 DataSetn nsqlDataAdaper.Fill(dsStudentsqlDataAdaper.Fill(dsStudent,student);/,student);/用用sqlDataAdapersqlDataAdaper填充数据集填充数据集3838版权所有版权所有C#程序设计与案例