Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 17 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
17
Dung lượng
117,2 KB
Nội dung
Thao tác XML XML và ADO.NET – Phần 2 Chuyển sang cơ sở dữ liệu quan hệ Các ví dụ trên chỉ thực hiện cho một bảng, nhưng với cơ sở dữ liệu quan hệ thì sao chẳng hạn như multiple DataTables và Relations trong DataSet? Chúng vẫn hoạt động bình thường. Hãy thực hiện các thay đổi sau trong mã nguồn mã chúng ta đã dùng (mã nguồn có thể tìm thấy trong ADOSample3): private void button1_Click(object sender, System.EventArgs e) { //create a dataset DataSet ds=new DataSet("XMLProducts"); //connect to the northwind database and //select all of the rows from products table and from suppliers table //make sure your connect string matches your server configuration SqlConnection conn=new SqlConnection (@"server=GLYNNJ_CS\NetSDK;uid=sa;pwd=;database=northwind"); SqlDataAdapter daProd=new SqlDataAdapter("SELECT * FROM products",conn); SqlDataAdapter daSup=new SqlDataAdapter("SELECT * FROM suppliers",conn); //Fill DataSet from both SqlAdapters daProd.Fill(ds,"products"); daSup.Fill(ds,"suppliers"); //Add the relation ds.Relations.Add(ds.Tables["suppliers"].Columns["SupplierId"], ds.Tables["products"].Columns["SupplierId"]); //Write the XML to a file so we can look at it later ds.WriteXml(" \\ \\ \\SuppProd.xml",XmlWriteMode.WriteSchema); //load data into grid dataGrid1.DataSource=ds; dataGrid1.DataMember="suppliers"; //create the XmlDataDocument doc=new XmlDataDocument(ds); //Select the productname elements and load them in the grid XmlNodeList nodeLst=doc.SelectNodes("//ProductName"); foreach(XmlNode nd in nodeLst) listBox1.Items.Add(nd.InnerXml); } Trong ví dụ này chúng ta tạo hai DataTables trong DataSet XMLProducts: Products và Suppliers. Quan hệ là Suppliers cung cấp Products. Chúng ta tạo mọt quan hệ trên cột SupplierId ở cả hai bảng. Bảng DataSet trông như sau: Bằng cách tạo phương thức WriteXml() giống như ta đã làm ở ví dụ trước, chúng ta sẽ nhận được file XML như sau (SuppProd.xml): <?xml version="1.0" standalone="yes"?> <XMLProducts> <xs:schema id="XMLProducts" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <xs:element name="XMLProducts" msdata:IsDataSet="true"> <xs:complexType> <xs:choice maxOccurs="unbounded"> <xs:element name="products"> <xs:complexType> <xs:sequence> <xs:element name="ProductID" type="xs:int" minOccurs="0" /> <xs:element name="ProductName" type="xs:string" minOccurs="0" /> <xs:element name="SupplierID" type="xs:int" minOccurs="0" /> <xs:element name="CategoryID" type="xs:int" minOccurs="0" /> <xs:element name="QuantityPerUnit" type="xs:string" minOccurs="0" /> <xs:element name="UnitPrice" type="xs:decimal" minOccurs="0" /> <xs:element name="UnitsInStock" type="xs:short" minOccurs="0" /> <xs:element name="UnitsOnOrder" type="xs:short" minOccurs="0" /> <xs:element name="ReorderLevel" type="xs:short" minOccurs="0" /> <xs:element name="Discontinued" type="xs:boolean" minOccurs="0" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="suppliers"> <xs:complexType> <xs:sequence> <xs:element name="SupplierID" type="xs:int" minOccurs="0" /> <xs:element name="CompanyName" type="xs:string" minOccurs="0" /> <xs:element name="ContactName" type="xs:string" minOccurs="0" /> <xs:element name="ContactTitle" type="xs:string" minOccurs="0" /> <xs:element name="Address" type="xs:string" minOccurs="0" /> <xs:element name="City" type="xs:string" minOccurs="0" /> <xs:element name="Region" type="xs:string" minOccurs="0" /> <xs:element name="PostalCode" type="xs:string" minOccurs="0" /> <xs:element name="Country" type="xs:string" minOccurs="0" /> <xs:element name="Phone" type="xs:string" minOccurs="0" /> <xs:element name="Fax" type="xs:string" minOccurs="0" /> <xs:element name="HomePage" type="xs:string" minOccurs="0" /> </xs:sequence> </xs:complexType> </xs:element> </xs:choice> </xs:complexType> <xs:unique name="Constraint1"> <xs:selector xpath=".//suppliers" /> <xs:field xpath="SupplierID" /> </xs:unique> <xs:keyref name="Relation1" refer="Constraint1"> <xs:selector xpath=".//products" /> <xs:field xpath="SupplierID" /> </xs:keyref> </xs:element> </xs:schema> <products> <ProductID>1</ProductID> <ProductName>Chai</ProductName> <SupplierID>1</SupplierID> <CategoryID>1</CategoryID> <QuantityPerUnit>10 boxes x 20 bags</QuantityPerUnit> <UnitPrice>18</UnitPrice> <UnitsInStock>39</UnitsInStock> <UnitsOnOrder>0</UnitsOnOrder> <ReorderLevel>10</ReorderLevel> <Discontinued>false</Discontinued> </products> <suppliers> <SupplierID>1</SupplierID> <CompanyName>Exotic Liquids</CompanyName> <ContactName>Charlotte Cooper</ContactName> <ContactTitle>Purchasing Manager</ContactTitle> [...]... (171) 55 5 -2 22 2 Sơ đồ bao gồm cả hai DataTables trong DataSet Hơn nữa, dữ liệu bao gồm tất cả dữ liệu trong cả hai bảng Vì lí do ngắn gọn , chúng ta chỉ chỉ ra nhà cung cấp và các sản phẩm đầu tiên Giống như trước bạn có thể chỉ lưu schema hoặc dữ liệu thông qua tham số XmlWriteMode Chuyển đổi XML thành dữ liệu ADO.NET Nếu bạn có một tài liệu XML và muốn chuyển... listBox1.Items.Add(nd.InnerXml); } Chúng ta khởi tạo một đối tượng DataSet Sau đó gọi phương thức ReadXml(), và giờ đây bạn có XML trong một DataTable trong DataSet của bạn Các phương thức WriteXml(), ReadXml() có một tham số XmlReadMode ReadXml() có một cặp tùy chọn trong XmlReadMode Bảng sau đây mô tả chúng: Giá trị Giải thích Auto Gán vào XmlReadMode giá trị thích hợp nhất Nếu dữ liệu được định dạng là DiffGram, DiffGram... DataSet("XMLProducts"); //read in the XML document to the Dataset ds.ReadXml(" \\ \\ \\prod .xml" ); //load data into grid dataGrid1.DataSource=ds; dataGrid1.DataMember="products"; //create the new XmlDataDocument doc=new XmlDataDocument(ds); //load the product names into the listbox XmlNodeList nodeLst=doc.SelectNodes("//ProductName"); foreach(XmlNode nd in nodeLst) listBox1.Items.Add(nd.InnerXml); }... liệu XML Nếu một schema có sẵn trong DataSet, schema này được Giá trị Giải thích sử dụng, và được mở rộng và thêm vào các cột và các bảng nếu cần Có thể xảy ra một ngoại lện nếu một cột tồn tại sẵn, nhưng khác kiểu dữ liệu ReadSchema Đọc schema nội và load dữ liệu Sẽ không ghi đè một schema trong DataSet, Nhưng sẽ tạo ra một ngoại lện nếu bảng trong schema nội đã có sẵn trong DataSet Phương thức ReadXmlSchema()... schema độc lập và tạo các bảng, cột và các quan hệ Bạn sẽ dụng nó nếu schema của bạn không nội tuyến với dữ liệu ReadXmlSchema() có bốn quá tải: chuỗi với tên và đường dẫn của file, đối tượng xuất phát Stream, đối tượng xuất phát từ TextReader và một đối tượng xuất phát từ XmlReader private void button1_Click(object sender, System.EventArgs e) { //create the DataSet DataSet ds=new DataSet("XMLProducts");... XmlWriteMode Chuyển đổi XML thành dữ liệu ADO.NET Nếu bạn có một tài liệu XML và muốn chuyển nó thành một ADO.NET DataSet Để làm điều này bạn load XML vào một, hoặc có thể kết nối dữ liệu với một điều khiển dữ liệu NET như DataGrid Cách này bạn có thể thật sự sử dụng tài liệu XML như một kho lưu trữ dữ liệu, và có thể loại trừ khả năng truy xuất ra ngoài cơ sở dữ liệu Nếu dữ liệu của bạn vừa phải, thì có thể... DataSet("XMLProducts"); //read in the XML document ds.ReadXml(" \\ \\ \\SuppProd .xml" ); //load data into grid dataGrid1.DataSource=ds; dataGrid1.DataMember="products"; //load the listbox with table, column and datatype info foreach(DataTable dt in ds.Tables) { listBox1.Items.Add(dt.TableName); foreach(DataColumn col in dt.Columns) { listBox1.Items.Add( '\t' + col.ColumnName + " - " + col.DataType.FullName);... mỗi cột trong DataTable Chúng ta load dữ liệu này vào listbox, để cho phép hiển thị chúng Đây là màn hình sau khi chạy: Bạn nên nhớ rằng cả hai ví dụ trên đều không truyên bất kì giữ liệu nào từ hoặc đến một cơ sở dữ liệu, không có một SqlDataAdapter hoặc SqlConnection nào được định nghĩa Nó chỉ ra tính mềm dẻo của hai không gian tên System .Xml và ADO.NET: bạn có thể xem xet dữ liệu trong nhiều định... hoặc một schema nội được Giá trị Giải thích tìm ra, thì ReadSchema được chọn Nếu không có schema nào được gán trong DataSet, và không một nội tuyến nào được tìm ra, thì IgnoreSchema được chọn DiffGram Đọc trong DiffGram và áp dụng các thay đổi cho DataSet DiffGrams được mô tả trong phần sau Fragment Đọc tài liệu chứa sơ đồ XDR phân mảnh, như kiểu được tạo bởi SQL Server IgnoreSchema Bỏ qua các schema nội... không gian tên System .Xml và ADO.NET: bạn có thể xem xet dữ liệu trong nhiều định dạng Nếu bạn muốn truyền dữ liệu theo định dạng HTML, hoặc nếu muốn kết nối với một grid, bạn cần có dữ liệu tương tự, và gọi phương thức thích hợp . id="XMLProducts" xmlns="" xmlns:xs="http://www.w3.org /20 01/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com :xml- msdata"> <xs:element name="XMLProducts". Thao tác XML XML và ADO. NET – Phần 2 Chuyển sang cơ sở dữ liệu quan hệ Các ví dụ trên chỉ thực hiện cho một bảng,. cung cấp và các sản phẩm đầu tiên. Giống như trước bạn có thể chỉ lưu schema hoặc dữ liệu thông qua tham số XmlWriteMode. Chuyển đổi XML thành dữ liệu ADO. NET Nếu bạn có một tài liệu XML và muốn