| 列表1: 建立关系数据缓存的C#代码 using System; using System.Collections; using System.Data; using System.Data.SqlClient; using System.Xml; public class XMLMap { public static void Main() { // 建立数据集和读取大纲 DataSet orderDS = new DataSet("CustOrder"); orderDS.ReadXmlSchema("CustOrderLitem.xsd"); // 打印数据集的形式 printDSShape(orderDS); // 把一个XML格式的订单读入数据集 orderDS.ReadXml("Order.xml",System.Data.XmlReadMode.IgnoreSchema); // 打印数据集中的数据 printDSData(orderDS); // 此处插入业务规则和数据库更新逻辑 } private static void printDSShape(DataSet ds) { foreach (DataTable dt in ds.Tables) { Console.WriteLine("{0}",dt.TableName); // 打印列的名称和类型 foreach (DataColumn dc in dt.Columns) Console.WriteLine("\t{0}\t{1}",dc.ColumnName,dc.DataType.ToString()); } } private static void printDSData(DataSet ds) { foreach (DataTable dt in ds.Tables) { Console.WriteLine("\n{0}:", dt.TableName); // 打印列的头 foreach (DataColumn dc in dt.Columns) Console.Write("{0}\t",dc.ColumnName); Console.WriteLine(""); // 输出数据 foreach (DataRow dr in dt.Rows) { foreach(DataColumn dc in dt.Columns) System.Console.Write("{0}\t",dr[dc]); System.Console.WriteLine(""); } } } } 仔细查看一下列的名称。尽管大纲中没有指定Customer_Id和Order_Id列,但是它们还是出现在数据表中。ReadXmlSchema给数据集自动添加这些列。数据集把这些列用作外部键(foreign key),以模拟Customer元素与它的Order元素之间、Order元素与它的LineItem元素之间的关系。因为典型情况下XML使用嵌套的关系代替了外部键,所以数据集自动生成自己的主键、数据表之间的外部键,并把它们存储在这些列中。 请同时仔细查看图3中的数据类型--数据集已经把来自XML大纲数据类型的数据类型映射为对应的.net数据类型。当你把XML文档载入数据集的时候,该数据集把来自XML的每一个值转换为对应的.NET类型。 图3:生成的数据类型和记录 Customer CustomerID System.String Customer_Id System.Int32 Order OrderID System.Int64 Order_Id System.Int32 Customer_Id System.Int32 LineItem ProductID System.Int32 Quantity System.Int32 UnitPrice System.Decimal Order_Id System.Int32 Customer: CustomerID Customer_Id ALFKI 0 Order: OrderID Order_Id Customer_Id 10966 0 0 LineItem: ProductID Quantity UnitPrice Order_Id 37 8 26.5 0 56 12 38 0 把大纲载入数据集之后,为了完成关系映射,你需要做的所有事情就是把XML数据载入该数据集。列表1的ReadXml方法打开叫作Order.xml的文件,该文件如图2所示。接着,它把文件中的数据读取到你刚才读取大纲建立的数据集中的数据表里。你的XML订单现在可以通过数据集访问了。
|
| 共4页: 上一页 [1] [2] 3 [4] 下一页 |
评论加载中…