管理和使用数据库数据.ppt
南京理工大学计算机学院,第7章 管理和使用数据库数据,南京理工大学计算机学院,7.1 管理数据的几种常见类,南京理工大学计算机学院,Dataset类,Dataset是ADO.NET结构的主要组件,它是从数据库中检索到的数据在内存中的缓存。Dataset由一组DataTable对象组成,可使这些对象与DataRelation对象互相关联;还可通过使用UniqueConstraint和ForeignKeyConstraint对象在Dataset中实施数据完整性。Dataset将数据和架构作为XML文档形式进行读写。数据和架构可通过HTTP传输,并在启用XML的任何平台上被任何应用程序使用。可使用WriteXm1Schema方法将该架构保存为XML架构,并且可以使用WriteXml方法保存架构和数据。若要读取既包含架构又包含数据的XML文档,请使用ReadXml方法。,南京理工大学计算机学院,创建和刷新Dataset并依次更新原始数据步骤,使用SqlDataAdapter或OleDbDataAdapter,用数据源中的数据构造和填充Dataset中的每个DataTable。通过添加、更新或删除DataRow对象,更改单个DataTable对象中的数据。调用GetChanges方法,以创建只反映对数据进行的更改的第二个Dataset。调用SqlDataAdapter(或OleDbDataAdapter)的Update方法,并将第二个Dataset作为参数传递。调用Merge方法将第二个Dataset中的更改合并到第一个中。针对Dataset调用AcceptChanges。或者,调用RejectChanges以取消更改。,南京理工大学计算机学院,DataTable类,DataTable是ADO.NET库中的核心对象。其他使用DataTable的对象包括Dataset和DataView。如果正在以编程方式创建DataTable,则必须先通过将DataColumn对象添加到 DataColumnCollection(通过Columns属性访问)中来定义其架构。若要向DataTable中添加行,必须先使用NewRow方法返回新的DataRow对象。NewRow方法返回具有DataTahle的架构的行,DataTable可存储的最大行数是16,777,216。DataTable包含可用于确保数据完整性的Constraint对象的集合。若要确定何时对表进行更改,请使用以下某个事件:RowChanged,RowChanging,RowDeleting和RowDeleted。当创建DataTable的实例时,某些读/写属性将被设置为初始值。,南京理工大学计算机学院,DataRow类,DataRow和DataColumn对象是DataTable的主要组件。使用DataRow对象及其属性和方法检索、评估、插入、删除和更新DataTable中的值。DataRowCollection表示DataTable中的实际DataRow对象,DataColumnCollection中包含用于描述DataTable的架构的DataColumn对象。可使用重载的Item属性返回或设置DataColumn的值。使用HasVersion和IsNull属性确定特定行值的状态,使用RowState属性确定行相对于它的父级DataTable的状态。若要创建新的DataRow,请使用DataTable对象的NewRow方法。创建新的DataRow之后,请使用Add方法将新的DataRow添加到DataRowCollection中。最后,调用DataTable对象的AcceptChanges方法以确认是否已添加。,南京理工大学计算机学院,DataRow类,可通过调用DataRowCollcction的Remove方法或调用DataRow对象的Delete方法,从DataRowCollection中删除DataRow。Remove句将行从集合中移除。与此相反,Delete标记要移除的DataRow。在调用AcceptChanges方法时发生实际移除。通过调用Delete,可在实际删除行之前以编程方式检查哪些行被标记为移除。,南京理工大学计算机学院,DataRow类,private void CreateNewDataRow()/使用MakeTable函数在下面创建一个新表 DataTable myTable;myTable=MakeNamesTable();/使用NewRow创建一个新DataRow DataRow myRow;myRow=myTable.NewRow();/将新记录行加入数据集中 myRow fName=John;myRow lName=Smith;myTable.Rows.Add(myRow);foreach(DataColumn dc in myTable.Colmns)Console.WriteLine(dc.ColumnName);dataGrid1.DataSource=myTable;,南京理工大学计算机学院,DataRow类,private DataTable MakeNamesTable()/创建一个命名为“Names”的新DataTable DataTable namesTable=new DataTable(Names);/向表里添加三个列对象 DataColumn idColumn=new DataColumn();idColumn.DataType=System.Type.GetType(System.Int32);idColumn.ColumnName=id;idColumn.AutoIncrement=true;namesTable.Columns.Add(idColumn);DataCo1umn fNameColumn=new DataColumn();fNameColumn.DataType=system.Type.GetType(System.String);fNameColumn.ColumnName=Fname;fNameColumn.DefaultValue=Fname;namesTable.Columns.Add(fNameColumn);DataColumn lNameColumn=new DataColumn();lNameColumn.DataType=System.Type.GetType(System.String);lNameColumn.ColumnName=LName;namesTable.Columns.Add(lNameColumn);/为DataColumn对象创建一个数组 DataColumn keys=new DataColumn 1;keys 0=idColumn;namesTable.PrimaryKey=keys;/返回新DataTable return namesTable;,南京理工大学计算机学院,DataColumn类,DataColurnn是用于创建DataTable的架构的基本构造块。通过向DataColumnCollection 中添加一个或多个DataColumn对象来生成这个架构。每个DataColumn都有DataType属性,该属性确定DataColumn所包含的数据的种类。例如,可以将数据类型限制为整数、字符串或小数。由于DataTable所包含的数据通常合并回其原始数据源,因此必须使数据类型与数据源中的数据类型匹配。,DataRelation类,南京理工大学计算机学院,使用DataRelation通过DataColumn对象将两个DataTable对象相互关联。关系是在父表和子表中的匹配的列之间创建的。即,两个列的DataType值必须相同。关系还可以将父级DataRow中的各种更改层叠到其子行。若要控制在子行中如何更改值,请将ForeignKeyConstraint添加到DataTable对象的ConstraintCollection。ConstraintCollection确定在删除或更新父表中的值时采取什么操作。在创建DataRelation时,它首先验证是否可以建立关系。在将它添加到DataRelationCollection之后,通过禁止会使关系无效的任何更改来维持此关系。,DataRelation类,南京理工大学计算机学院,DataRelation对象包含在DataRelationCollection中,后者可以通过DataSet的Relations属性、DataTable的ChildRelations和ParentRelations属性来访问。,private void CreateRelation()/从一个数据集中的两个表对象中得到Datacolumn对象 DataColumn parentCol;DataColunm childCol;parentCol=DataSet1.Tables Customers.Columns CustID;childCol=DataSet1.Tables Orders.Columns CustID;/创建一个新的DataRelation DataRelation re1Custorder;re1Custorder=new DataRelation(CustomersOrders,parentCol,childCol);/将关系添加到数据集中 DataSet1.Relations.Add(re1Custorder);,南京理工大学计算机学院,7.2 数据集内的筛选与排序,南京理工大学计算机学院,14,南京理工大学计算机学院,14,