《数据库应用开发-客户端开发技术及工具.ppt》由会员分享,可在线阅读,更多相关《数据库应用开发-客户端开发技术及工具.ppt(73页珍藏版)》请在三一办公上搜索。
1、数据库应用开发,客户端开发技术及工具,第一节 ODBC应用与开发,学习目标:,什么是ODBC?,ODBC的体系结构;,ODBC的应用特色;,ODBC操纵。,一、什么是ODBC?,1、ODBC的概念,ODBC(OpenDatabaseConnectivity,开放数据库互连)是微软公司开放服务结构(WOSA,WindowsOpenServicesArchitecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(Application Programming Interface,应用程序编程接口)。这些API利用SQL来完成其大部分任务。ODBC本身也提
2、供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。,一、什么是ODBC?,2、ODBC技术背景,史前 API,后来 CLI(Call-Level Interface),再后来 ODBC,再后来 OLE,新世纪终于到来 ADO.NET,再后来 ADO,二、ODBC的体系结构,1、ODBC的组成结构,二、ODBC的体系结构,2、各层的功能,三、应用ODBC的优势,1、应用ODBC保证了数据库的独立性,2、应用ODBC保证了数据库之间的互操作能力,四、ODBC操纵,重点:如何创建ODBC数据源,第二节 ADO应用与开发,学习目标:什么是ADO?ADO对象及其应用!ADO对象模型及其应用特
3、征,一、ADO概述,1、什么是ADO?ADO,即ActiveX Data Objects,是一种应用广泛的数据库访问技术,它基于OLEDB技术,是对OLEDB面向对象的封装。OLEDB与ODBC相比,在底层的数据库引擎和每一个独立的数据库引擎之间的接口存在着较大的不同。在ODBC中,每一种类型的数据库都必须有相应的驱动器动态链接库(DLL),ODBC引擎使用该DLL打开相应类型的数据库并进行记录的读写修改等操作。OLEDB同样需要驱动器,但不同的是,OLEDB的驱动器是通过ActiveX实现的。一个ActiveX就定义了用来实现特定接口的类,这种方式减少了程序和数据库引擎之间的层次,因而提高了
4、数据库编程的速度。ADO实际上就是一个ActiveX对象集,封装了多种对象方法属性。,1.1 ADO、OLE DB以及ODBC的关系,1.2 ADO基本操作,ADO提供了以下的操作:连接到数据源;指定访问数据源的命令;执行命令;如果这个命令使数据按表中的行的方式返回,则将这些行存储在易于检查、操作或更改的缓存(CASHE)中;适当情况下,可使用缓存行中的更改内容来更新数据源;提供常规的方法检测错误。,二、ADO对象模型及其应用特征,2.2 ADO对象的功能说明,其中,Connection,Command,Recordset和Fields对象还有Properties集合。Connection 对
5、象代表打开的、与数据源的连接;Command 对象定义了将对数据源执行的指定命令;Recordset 对象表示的是来自基本表或命令执行结果的记录全集;Errors 对象包含与单个操作(涉及提供者)有关的数据访问错误的详细信息;Fields 对象代表使用普通数据类型的数据的列的集合;Parameter 对象代表与基于参数化查询或存储过程的 Command 对象相关联的参数或自变量;Property 对象代表由提供者定义的 ADO 对象的动态特征;,2.3 ADO的优点,使用方便灵活;使用简单;面向对象的体系结构;对象的共享机制。,三、Connection对象,1、Connection对象的作用
6、Connection对象是数据库与外界沟通的唯一桥梁,所有对数据库的操作都必须依赖于Connection对象。一个Connection对象代表了一个程序到数据库的连接。,3.2 Connection对象的属性,3.3 Connection对象的方法,3.4 Connection对象应用示例(ASP),定义及实例化DIM MyConnSET MyConn=Server.CreateObject(ADODB.CONNECTION)打开连接DIM ConnStrConnStr=“DSN=mydsn;uid=userid;pwd=userpwd”MyConn.ConnectionString=Conn
7、StrIF MyConn.State=AdStateClosed THEN MyConn.OpenEND IF或MyConn.Open ConnStr关闭连接IF MyConn.State=AdStateOpen THEN MyConn.CloseEND IF释放连接SET MyConn=nothing,3.5 使用Connection对象返回记录集,DIM MyRSSET MyRS=Server.CreateObject(“ADODB.RECORDSET”)DIM SelectSQLStrSelectSQLStr=“select.”MyRS=MyConn.Execute SelectSQLS
8、tr或MyRS.Open SelectSQLStr,MyConn,3.6 使用Connection对象进行数据更新,DIM SQLStrSQLStr=“update”或SQLStr=“insert into”或SQLStr=“delete from”MyConn.BeginTrans MyConn.Execute SQLStrIF err.number 0 THEN MyConn.RollbackTransELSE MyConn.CommitTransEND IF,第三节 ADO.NET应用开发,ADO.NET的名称起源于ADO(ActiveX Data Objects),这是一个广泛的类组,
9、用于在以往的Microsoft技术中访问数据。之所以使用ADO.NET名称,是因为Microsoft希望表明,这是在.NET编程环境中优先使用的数据访问接口。它提供了平台互用性和可伸缩的数据访问。ADO.NET增强了对非连接编程模式的支持,并支持RICH XML。由于传送的数据都是XML格式的,因此任何能够读取XML格式的应用程序都可以进行数据处理。事实上,接受数据的组件不一定要是ADO.NET组件,它可以是基于一个Microsoft Visual Studio的解决方案,也可以是任何运行在其它平台上的任何应用程序。,一、ADO.NET简介,ADO.NET是一组用于和数据源进行交互的面向对象类
10、库。通常情况下,数据源是数据库,但它同样也能够是文本文件、Excel表格或者XML文件。ADO.NET允许和不同类型的数据源以及数据库进行交互。然而并没有与此相关的一系列类来完成这样的工作。因为不同的数据源采用不同的协议,所以对于不同的数据源必须采用相应的协议。一些老式的数据源使用ODBC协议,许多新的数据源使用OleDb协议,并且现在还不断出现更多的数据源,这些数据源都可以通过.NET的ADO.NET类库来进行连接。,ADO.NET简介,ADO.NET是一种基于标准的程序设计模型,可以用来创建分布式应用以实现数据共享。在ADO.NET中,DataSet占据重要地位,它是数据库里部分数据在内存
11、中的拷贝。与ADO中的RecordSet不同,DataSet可以包括任意个数据表,每个数据表都可以用于表示自某个数据库表或视图的数据。DataSet驻留在内存中,且不与原数据库相连,即无需与原数据库保持连接。完成工作的底层技术是XML,它是DataSet所采用的存储和传输格式。在运行期间,组件(如某个业务逻辑对象或 web表单)之间需要交换DataSet中的数据。数据以XML文件的形式从一个组件传输给另一个组件,由接收组件将文件还原为DataSet形式。DataSet的有关方法与关系数据模型完全一样。,二、ADO.NET包含的对象,2-1 ADO.NET包含的对象,SqlConnection
12、对象 和数据库交互,你必须连接它。连接帮助指明数据库服务器、数据库名字、用户名、密码,和连接数据库所需要的其它参数。connection对象会被command对象使用,这样就能够知道是在哪个数据库上面执行命令。SqlCommand对象与数据库交互的过程意味着你必须指明想要发生的操作。这是依靠command对象执行的。你使用command对象来发送SQL语句给数据库。command对象使用connection对象来指出与哪个数据库进行连接。你能够单独使用command对象来直接执行命令,或者将一个 command对象的引用传递给SqlDataAdapter,它保存了一组能够操作下面描述的一组数据
13、的命令。,2-2 ADO.NET包含的对象,SqlDataReader对象 许多数据操作要求你只是读取一串数据。data reader对象允许你获得从command对象的SELECT语句得到的结果。考虑性能的因素,从data reader返回的数据都是快速的且只是“向前”的数据流。这意味着你只能按照一定的顺序从数据流中取出数据。这对于速度来说是有好处的,但是如果你需要 操作数据,更好的办法是使用DataSet。,2-3 ADO.NET包含的对象,DataSet对象 DataSet对象是数据在内存中的表示形式。它包括多个DataTable对象,而 DataTable包含列和行,就象一个普通的数据
14、库中的表。你甚至能够定义表之间的关系来创建主从关系(parent-child relationships)。DataSet是在特定的场景下使用帮助管理内存中的数据并支持对数据的断开操作的。DataSet是被所有Data Providers使用的对象,因此它并不像Data Provider一样需要特别的前缀。,2-4 ADO.NET包含的对象,SqlDataAdapter对象某些时候你使用的数据主要是只读的,并且你很少需要将其改变至底层的数据源。同样一些情况要求在内存中缓存数据,以此来减少并不改变的数据被数据库调用的次数。Data adapter通过断开模型来帮助你方便的完成对以上情况的处理。当
15、在一单批次的对数据库的读写操作的持续的改变返回至数据库的时候,Data adapter 填充(fill)DataSet对象。data adapter包含对连接对象以及当对数据库进行读取或者写入的时候自动的打开或者关闭连接的引用。另外,data adapter包含对数据的SELECT,INSERT,UPDATE和DELETE操作的command对象引用。你将为DataSet中的每一个 table都定义data adapter,它将为你照顾所有与数据库的连接。所有你将做的工作是告诉data adapter什么时候装载或者写入到数据库。,.NET数据提供程序,.NET框架提供了四种数据提供程序(.N
16、ET Data Provider),它们分别是:1.SQL Server.NET Framework Data Provider命名空间:System.Data.SqlClient;2.OLE DB.NET Framework Data Provider命名空间:System.Data.OleDb;3.ODBC.NET Framework Data Provider命名空间:System.Data.ODbc;4.ORACLE.NET Framework Data Provider命名空间:System.Data.OracleClient;每种Data Provider都包含四种对象:Conne
17、ction对象:提供与数据源的连接 Command对象:使用户能够访问用于返回数据、修改数据、运行存储过程等的数据库命令DataReader对象:从数据源中提供高性能的数据流DataAdapter对象:提供连接DataSet和数据源的桥梁。DataAdapter使用Command对象在数据源中执行SQL命令,以便将数据加载到DataSet中,并使对DataSet数据的更改与数据源保持一致。,三、ADO.NET的体系结构,换个角度看ADO.NET体系结构,四、ADO.NET中数据库连接,System.Data.SqlClient.SqlConnection常用的一些连接字符串(C#代码):Sql
18、Connection conn=new SqlConnection(Server=(local);Integrated Security=SSPI;database=Pubs);SqlConnection conn=new SqlConnection(server=(local)NetSDK;database=pubs;Integrated Security=SSPI);SqlConnection conn=new SqlConnection(Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;);S
19、qlConnection conn=new SqlConnection(data source=(local);initial catalog=xr;integrated security=SSPI;persist security info=False;workstation id=XURUI;packet size=4096;);SqlConnection myConn=new SqlConnection(Persist Security Info=False;Integrated Security=SSPI;database=northwind;server=mySQLServer);S
20、qlConnection conn=new SqlConnection(uid=sa;pwd=passwords;initial catalog=pubs;data source=127.0.0.1;Connect Timeout=900);,ADO.NET中数据库连接,System.Data.OleDb.OleDbConnection常用的一些连接字符串(C#代码):OleDbConnection conn=new OleDbConnection(Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:MyWeb8105GrocerToGo.mdb);O
21、leDbConnection conn=new OleDbConnection(Provider=Microsoft.Jet.OLEDB.4.0;Password=;User ID=Admin;Data Source=grocertogo.mdb;);OleDbConnection conn=new OleDbConnection(Provider=MSDAORA;Data Source=ORACLE8i7;Persist Security Info=False;Integrated Security=yes);OleDbConnection conn=new OleDbConnection(
22、Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:binLocalAccess40.mdb);OleDbConnection conn=new OleDbConnection(Provider=SQLOLEDB;Data Source=MySQLServer;Integrated Security=SSPI);,ADO.NET中数据库连接,System.Data.OracleClient.OracleConnection常用的一些连接字符串(C#代码):OracleConnection myConn=new System.Data.OracleCli
23、ent.OracleConnection(Data Source=Oracle8i;Integrated Security=yes);其他厂商提供的数据库连接:DB2Connection myConn=new IBM.Data.DB2.DB2Connection(DATABASE=SAMPLE;UID=;PWD=;);DB2Connection myConn=new IBM.Data.DB2.DB2Connection(DATABASE=SAMPLE);,ADO.NET中数据库连接,System.Data.Odbc.OdbcConnection常用的一些连接字符串(C#代码):OdbcConn
24、ection conn=new OdbcConnection(Driver=SQL Server;Server=MyServer;Trusted_Connection=yes;Database=Northwind;);OdbcConnection conn=new OdbcConnection(Driver=Microsoft ODBC for Oracle;Server=ORACLE8i7;Persist Security Info=False;Trusted_Connection=yes);OdbcConnection conn=new OdbcConnection(Driver=Micr
25、osoft Access Driver(*.mdb);DBQ=c:binnwind.mdb);OdbcConnection conn=new OdbcConnection(Driver=Microsoft Excel Driver(*.xls);DBQ=c:binbook1.xls);OdbcConnection conn=new OdbcConnection(Driver=Microsoft Text Driver(*.txt;*.csv);DBQ=c:bin);OdbcConnection conn=new OdbcConnection(DSN=dsnname);,4.2 ADO.NET数
26、据库开发应用一般模式,申明并使用连接字符串实例化Connection对象打开连接申明并使用SQL指令实例化Command对象若SQL指令为无返回结果集的指令,则直接执行Command对象的ExecuteNonQuery方法,该方法返回影响的数据行数。然后跳至8若SQL指令有结果集,则申明并使用Command对象申明一个DataAdapter对象申明一个DataSet对象myDS使用DataAdapter对象填充myDS关闭连接,4.2.1 ADO.NET无返回结果集(C#),SqlConnection conn=new SqlConnection(connStr);SqlCommand cmd
27、=new SqlCommand(SQLStr);cmd.Connection=conn;try if(conn.State=ConnectionState.Closed)conn.Open();return cmd.ExecuteNonQuery();,4.2.1 ADO.NET无返回结果集(C#),Catch(Exception exp)Finally if(conn.State=ConnectionState.Open)conn.Close();,4.2.2 ADO.NET有返回结果集(C#),SqlConnection conn=new SqlConnection(connStr);Sq
28、lCommand cmd=new SqlCommand(SQLStr);cmd.Connection=conn;try if(conn.State=ConnectionState.Closed)conn.Open();SqlDataAdapter dap=new SqlDataAdapter(cmd);,4.2.2 ADO.NET有返回结果集(C#),DataSet myDS=new DataSet();dap.Fill(myDS,strTableName);Catch(Exception exp)Finally if(conn.State=ConnectionState.Open)conn.
29、Close();,4.3 ADO.NET连接的管理,可以使用Open和Close显示地打开和关闭连接;如果使用DataAdapter,就不必显示地打开和关闭连接。调用DataAdapter的相关方法,如Fill时,会自动检查连接是否已经打开。如未打开,它将打开连接,执行其逻辑,然后关闭连接;当关闭连接时,从数据源出入的数据流将被关闭,但是连接对象使用的非托管资源并没有释放。若连接池是启用的,则将连接释放到池中。调用Dispose方法可以从连接池中删除连接。,4.4 连接池,建立和关闭数据库连接是相当消耗资源的过程。如果一个程序可能同时要建立多个连接,使用连接池能提高它的性能。连接池是SQL S
30、erver或OLE DB数据源的功能。它可以使特定的用户重复使用连接。,4.4 连接池,五、DataAdapter对象,DataSet对象表示来自数据源的数据副本。在没有数据源时,DataSet对象对保存窗体可使用的本地数据是很有用的,然而,dataSet对象作为实际的数据管理工具,必须能够与一个或者多个数据源进行交互。为了实现这种交互,微软.NET框架提供了DataAdapter类。DataAdapter对象用做DataSet对象和数据源之间的连接桥梁,能够用来检索和保存数据。DataAdapter类表示的是一组数据库命令和一个数据库连接,它们用来填充DataSet对象和更新数据源。每个Da
31、taAdapter对象都在单个DataTable对象和单个结果集之间交换数据。,5.1 DataAdapter对象的类型,.NET提供两个用于数据库的DataAdapter类:OleDataAdapter类。该类适用于由OLE DB数据提供程序公开的任何数据源。SqlDataAdapter类。主要用于SQL Server7.0或后续版本的数据库。SqlDataAdapter对象比OleDataAdapter对象速度要快,这是因为它直接在SQL Server上运行,而不必通过OLE DB提供程序层。,5.2 SqlDataAdapter构造方法,SqlDataAdapter()SqlDataAd
32、apter(SqlCommand mySqlCommand)SqlDataAdapter(string selectCommandString,SqlConnection mySqlConnection)SqlDataAdapter(string selectCommandString,string connectionString)/本方法性能不好,5.3 SqlDataAdapter属性和方法,六、Command对象,Command对象可使用数据命令与数据源(通常是数据库)通信。Command在某些情况下特别适用,例如一项计算或某个聚合函数的结果,以及创建和修改数据库结构。Command的
33、创建方法有三种:使用new 关键字创建,然后设置相关属性;使用查询字符串和Connection对象的参数的构造函数;调用Connection对象的CreateCommand方法。,6.1 Command对象的属性,Connection:对Connection对象的引用CommandType:可为Text,StoredProcedure和TableDirect中的一种CommandText:命令语句或存储过程名称Parameters:命令需要的参数,6.2 Command对象的参数管理,可使用Add方法为Command对象添加相关参数,6.3 Command对象方法,ExecuteNonQuer
34、y方法:无返回集,多用于进行数据更新,执行Insert/Update/Delete/Create/Alter等操作ExecuteScalar方法:返回单一值,多用于集函数查询ExecuteReader方法:返回类型为SqlDataReader,6.4 Command对象应用示例(一),string strConn,strSQL;strConn=“server=localhost;initial catalog=ST;user id=sa;pwd=123456”;SqlConnection conn=new SqlConnection(strConn);conn.Open();strSQL=“s
35、elect*from student where sn=?”;SqlCommand cmd=new SqlCommand(strSQL,conn);cmd.Parameters.Add(“SID”,SqlDbType.VarChar,10);cmd.Parameters0.Value=“2007130101”;SqlDataReader rdr=cmd.ExecuteReader();conn.Close();,6.4 Command对象应用示例(二),string strConn,strSQL;strConn=“server=localhost;initial catalog=ST;user
36、 id=sa;pwd=123456”;SqlConnection conn=new SqlConnection(strConn);conn.Open();strSQL=“select sname from student where sname like?”;SqlCommand cmd=new SqlCommand(strSQL,conn);cmd.Parameters.Add(“SNAME”,“张%”);SqlDataReader rdr=cmd.ExecuteReader();while(rdr.Read()Console.WriteLine(rdr0);rdr.Close();conn
37、.Close();,6.4 Command对象应用示例(三),SqlParameter SID=new SqlParameter(“SID”,SqlDbType.VarChar,10);SID.Value=“2007130101”;SID.Direction=ParameterDirection.Input;cmd.Parameters.Add(SID);,6.4 Command对象应用示例(四),string createTableStr=“create table”;SqlCommand cmd=new SqlCommand();cmd.ExecuteNonQuery();,6.4 Com
38、mand对象应用示例(五),SqlCommand ordersCMD=new SqlCommand(“select count(*)from orders”,conn);Int32 count=(Int32)ordersCMD.ExecuteScalar();,七、DataSet对象,DataSet是ADO.NET的中心概念。可以把DataSet想像成内存中的数据库。正是由于DataSet,才使得程序员在编程时可以屏蔽数据库之间的差异,从而获得一致的编程模型。DataSet支持多表、表间关系、数据约束等。,7.1 DataSet对象集合概述,DataSet中主要包含以下几个重要对象:Table
39、Collection对象。DataSet里的表是用DataTable来表示的。DataSet可以包含许多DataTable,这些DataTable构成TableCollection对象。DataTable是内存中的一张表。它包含一个ColumnsCollection对象和一个RowsCollection对象,分别表示表的列集和行集。DataTable保存有数据的状态,通过存取DataTable的当前状态,可以知道数据是否被更新或者删除。RelationsCollection对象。各个DataTable之间的关系通过DataRelation来表达,这些DataRelation形成一个集合,称为R
40、elationsCollection,它是DataSet的子对象。DataRelation表达了数据表之间的主外键关系,通过它可以轻松实现数据参照完整性。ExtendedProperties对象。在这个对象里可以定义特定的信息,比如密码、更新时间等。,7.2 DataTable对象,创建一个DataTableDataTable MyTable=new DataTable(“Test”);MyTable.CaseSensitive=False;/不区分大小写MyTable.Minimumcapacity=100;/预留100个记录空间创建表列MyTable.Columns.Add(“SID”,t
41、ypeof(string);/由于通常在定义表列时,是使用.NET架构中的数据类型,而非数据库的数据类型,所以需要使用typeof方法把.NET架构的数据类型转换成数据库中的数据类型创建表达式列在ADO.NET中允许创建一些依赖于其他表达式的表列,这样可较好地表现表列间的自然联系。要创建表达式列,需要用到列对象的Expression属性。DataColumn tax=new DataColumn();tax.DataType=typeof(Currency);tax.Expression=“total*rate*0.20”;MyTable.Columns.Add(tax);或MyTable.C
42、olumns.Add(“tax”,typeof(Currency),“total*rate*0.20”);,7.3 DataView对象,为了显示保存在dataSet对象中的数据,可以使用DataView对象来显示DataSet对象中的数据。DataView对象是单一DataTable对象的可绑定的、定制的显示。DataView对象可被定制成表示DataTable对象中数据的子集,这样的定制使得多个控件能绑定到同一个DataTable对象中,而每个控件显示不同版本的数据。DataSet对象中的每个DataTable对象都有DefaultView属性,该属性返回表的默认视图。如下:DataVie
43、w dv=MyDS.Tables“Authors”.DefaultView;,7.3.1 DataView对象示例,DataView dv=new DataView(MyDS.Tables“Authors”);dv.RowFilter=“state=CA”;dv.Sort=“au_lname”;,7.4 DataRow对象,在创建并定义Datatable的结构后,可以使用DataRow对象向表中添加新的数据行。若要向DataTable添加一个新行,首先要声明一个DataRow类型的变量。当调用DataTable的 NewRow方法时会返回一个新的DataRow对象。此对象根据DataTable
44、的DataColumnCollection来定义其结构。以下是定义DataRow并添加到DataTable的例子:DataRow drNewAuthor=dtAuthors.NewRow();drNewAuthor(0)=11;drNewAuthor(1)=“Smith”;dtAuthors.Rows.Add(drNewAuthor);,7.4.1 DataRow的编辑时状态管理,DataRow类为了在编辑数据时挂起和恢复数据行的状态提供了3个方法:BeginEdit,EndEdit,CancelEdit。当编辑数据时,调用BeginEdit可以挂起任何事件(或异常)。使用Items集合指定要
45、修改的数据的列名和新值。使用EndEdit重新恢复任何事件(或异常)。使用CancelEdit可以回滚任何更改和重新激活任何事件(或异常)。,7.4.2 删除DataRow对象,可以使用两种方法来从DataTable对象中删除DataRow对象:DataRowCollection对象的Remove方法和DataRow对象的Delete方法。Remove方法是从DataRowCollection中删除DataRow,而Delete方法只对删除的行做标记。Remove方法:DataRow drStudent=dtSyudents.Rows(3);dtStudents.Rows.Remove(drS
46、tudent);/这是真实的删除Delete方法:drStudent.Delete();/只是使该行的RowState属性值更改为Deleted,7.4.3 DataRow对象的RowState属性,DataRow类具有RowState属性。它用来表示从第一次创建DataTable开始,行是否发生更改,如何更改以及通过哪种方式进行更改。对DataRow中的列值的编辑将使RowState被标记为Modified。删除的行只是被隐藏起来,该行的RowState值是Deleted。新行在定义时被标记为detached,当这些行被附加到DataTable上时,被标记为Added。通过设置DataVie
47、w的RowStateFilter属性,可以指定DataView显示某些特殊的数据版本。如:dataView.RowStateFilter=DataViewRowState.Added|DataViewRowState.ModifiedCurrent;,7.4.3 DataViewRowState的值,7.5 创建表间关系,DataRelation对象使两个DataTable对象可以通过DataColumn对象相互引用,它类似于主键/外键关系,我们称之为主从(master-detail)关系。DataRelation对象包含在一个DataRelationCollection对象中,不但可以通过D
48、ataSet对象的Relations属性来访问,也可以通过DataTable对象的ChildRelations和ParentRelations属性来访问。创建DataRelation对象,需要使用DataRelation构造器和DataSet对象的Relations集合的Add方法。,7.5.1 DataRelation对象示例,DataRelation dr;DataColumn parentCol;DataColumn childCol;parentCol=MyDS.Tables“Customers”.Columns“CustomerID”;childCol=MyDS.Tables“Ord
49、ers”.Columns“CustomerID”;dr=new DataRelation(“Customers”,parentCol,childCol);MyDS.Relations.Add(dr);,7.6 DataSet到list-bound控件的数据绑定,要把DataSet绑定到list-bound控件,应指明这些list-bound控件的DataSource属性。DataSource可以是DataSet中的某个DataTable,也可以是某个DataView。/假设现有某DataGrid控件,名称为dgdg.DataSource=MyDS.Tables“Authors”;/或者是:Da
50、taView dv=new DataView(MyDS.Tables“Authors”);dv.RowFilter=“state=CA”;dg.DataSource=dv;,八、DataReader对象,使用DataSet对象最大的好处是它提供无连接的数据库副本。对于长时间运行的网络应用程序,特别是基于WEB的应用程序,使用DataSet无疑是最好的途径。然而,开发人员经常执行一些简短的操作,例如随着每次数据的请求,把单一的数据集直接显示给用户,或者访问单独的密码。对于这些操作,开发人员不需要保持DataSet对象,而应使用DataReader对象。,8.1 DataReader概述,节约内存