Chuyển đổi dữ liệu quan hệ sang dữ liệu XML

6 410 1
Chuyển đổi dữ liệu quan hệ sang dữ liệu XML

Đang tải... (xem toàn văn)

Thông tin tài liệu

Chuyển đổi liệu quan hệ sang liệu XML Tác giả: Ngô Đình Thưởng, Khoa Tin học, Trường ĐHSP Đà Nẵng I Giới thiệu XML từ viết tắt eXtensible Markup Language, XML Jon Bosakv (Sun MicroSystems) xây dựng từ năm 1998 XML sử dụng để lưu trữ liệu vận chuyển liệu ứng dụng môi trường desktop hay internet - XML sử dụng để lưu trữ liệu, không thay CSDL quan hệ mà sử dụng cho nhu cầu định đặc tính file văn bản, không phụ thuộc vào platform Trong sơ đồ tiến hóa hệ sở liệu (hình 1), XML tảng cho hệ sở liệu noSQL, hệ sở liệu web Hiện nay, môn Khai phá liệu web nghiên cứu giảng dạy chương trình đào tạo CNTT Hình 1: Sơ đồ tiến hóa hệ sở liệu [1] - XML sử dụng để trao đổi thông tin module ứng dụng Windows, SQL Server, Apache… sử dụng để vận chuyển liệu ứng dụng SOAP, Webservice… - Hiện nay, khối lượng lớn liệu lưu trữ hệ CSDL quan hệ, vấn đề chuyển đổi kho liệu thành dạng liệu XML Trong viết này, mô tả kỹ thuật để chuyển đổi liệu hệ sở liệu thông dụng SQL Server, Access 2003 MySQL sang tệp liệu XML với ADO.NET II Tổng quan ADO.NET II.1- Phương pháp cổ điển Phương pháp cổ điển sử dụng cho ngôn ngữ VB, VBScript dựa vào giao diện ADO, hay PHP dựa vào đối tượng recordset để trích xuất liệu thành stream XML, sau lưu vào tệp XML Sau tóm tắt ví dụ cho bảng SV(Masv,Hoten, DiaChi,Lop): • Với VBScript & ADO 3.0 path = "C:\sv.xml" Dim xmlDoc Set xmlDoc=Server.CreateObject("Microsoft.XMLDOM") ‘ trích xuất liệu vào đối tượng recordset rs str="" Do Until Rs.EOF str=str & "" & Rs("HoTen") & "" str=str & "" & Rs("DiaChi") & "" ' Có thể bổ sung thẻ khác để lưu địa chỉ, lớp Rs.MoveNext Loop str=str & "" xmlDoc.LoadXML(str) xmlDoc.Save(path) Ghi chú: môi trường Net Framework, ta có hàng loạt lớp xử lý XML, quan trọng lớp XmlDocument nằm name space System.Xml • Với PHP MySQL // giả sử liệu truy vấn lưu đối tượng recordset $rs $xml_output = "\n"; $xml_output = "\n"; while($row = mysql_fetch_array($rs)){ $xml_output = "\t\n"; $xml_output = "\t\t".$row['Hoten']."\n"; $xml_output = "\t\t".$row['Diachi']."\n"; $xml_output = "\t\n"; } $xml_output = ""; $fp=fopen("C:\sv.xml","w"); fwrite($fp,$xml_output); fclose($fp); II.2- Tổng quan ADO.NET Nhằm khắc phục hạn chế mô hình ADO, Microsoft xây dựng ADO.NET chạy Net Framework, xem giao diện lập trình sở liệu cho ứng dụng dựa Net Framework, đặc biệt đưa kỹ thuật kết xuất liệu quan hệ thành liệu XML với phương pháp phong phú Mô hình kiến trúc ADO.NET minh họa sau: Nguồn: http://www.codeproject.com ( có hiệu chỉnh) + Data Provider bao gồm lớp: Connection, Command, DataAdapter DataReader Lớp Connection thiết lập kết nối với liệu nguồn tham chiếu kết nối lớp Command DataAdapter Có phiên lớp Connection: - SqlConnection dành cho hệ sở liệu SQL Server - OleDbConnection dành cho hệ sở liệu khác - OdbcConnection để thực kết nối thông qua ODBC (Open Database Connectivity), phiên đáng ý SqlConnection OledbConnection Tương ứng với phiên Connection ta có lớp Command, DataAdapter DataReader phù hợp Các lớp nằm name sapce System.Data.SqlClient Lớp Command có trách nhiệm thực thi câu lệnh SQL hay Stored Procedure Đối tượng DataAdapter cầu nối đối tượng Connection đối tượng DataSet ADO.NET đưa phiên khác đối tượng DataAdapter: dùng cho SQL Server, dùng cho OLEDB với sở liệu quan hệ khác ODBC Data Provider Điều quan trọng sử dụng OLEDB phải xác định connection string đến loại sở liệu Thông tin cụ thể trình bày website www.connectionstrings.com Đối tượng DataReader thay cho đối tượng DataSet, cho phép đọc liệu theo chiều tiến phía trước mà + Đối tượng DataSet sử dụng XML để lưu trữ liệu cache vận chuyển liệu ứng dụng Data Provider, điều khác biệt với ADO 3.0, đối tượng DataSet chứa nhiều đối tượng DataTable Đối tượng DataSet thành phần ADO.NET III Các phương pháp chuyển đổi liệu quan hệ sang liệu XML III.1 Tổng quan phương pháp Cốt lõi phương pháp chuyển đổi liệu lưu DataSet hay liệu trả phương thức ExecuteScalar thành Stream XML - Với đối tượng StreamWriter lấy liệu DataSet Tables(0).Rows(0).Item(0) lưu thành tệp XML Sở dĩ chọn số đối tượng câu lệnh Select … for XML trả bảng có dòng, cột - Với đối tượng DataSet thân chứa liệu dạng XML, phương thức getXML() lấy thông tin DataSet cho lại Stream XML Lúc xử dụng phương thức lớp XmlDocument để nạp vào XML lưu thành tệp XML Sau ví dụ: III.2 Sử dụng đối tượng Command Thế mạnh đối tượng Command cho phép thực thi câu lệnh SQL, câu lệnh Select for XML cho phép kết xuất kết XML Stream Tùy theo nhu cầu cụ thể, ta sử dụng câu lệnh với nhiệm ý phù hợp Cú pháp : Select from for XML auto | raw | explicit [,xmldata | , elements] Giả sử ta có sở liệu SQL Server QLSV có bảng SV(Maso, Hoten, Lop)  Select * from SV for XML auto cho kết quả:  Select * from SV for XML auto, elements cho kết quả: 01Võ Văn Quân08SPT 02Nguyễn Tiệp08CNTT1  Select * from SV for XML raw cho kết quả:  Select * from SV for XML raw, elements cho kết quả: 01Võ Văn Quân08SPT 02Nguyễn Tiệp08CNTT1 Các phương pháp cho lại XML Stream thiếu thị xử lý nút gốc XML ta phải bổ sụng trước lưu tệp XML Ví dụ: Imports System.Xml Imports System.Data.SqlClient Module Module1 Dim xmlDoc As New XmlDocument Sub Main() Dim objConn As New SqlConnection("Data _ Source=NDT\SqlExpress;Database=QLSV;Integrated Security=SSPI;") objConn.Open() Dim objCmd As New SqlCommand("select * from SV for xml auto,_ elements",_ objConn) Dim strXML As String = objCmd.ExecuteScalar.ToString strXML="" strXML &= "" & strXML & "" xmlDoc.LoadXml(strXML) xmlDoc.Save("D:\UED.XML") End Sub End Module Trong môi trường VB 6.0 hay VbScript ta thực việc chuyển đổi trên, mã nguồn dài nhiều III.3 Sử dụng đối tượng DataSet Giả sử sở liệu QLSV đặt máy NDT\SQLExpress phân quyền Select cho user có tên “TH” mật ”1234”, a- Dùng phương thức WriteXML đối tượng DataSet Imports System.Xml Imports System.Data.SqlClient … Dim strCon As String = "Data Source=NDT\SQLExpress;Initial Catalog=SV;_ User ID=TH;Password=1234; Trusted_Connection=Yes" Dim connection As New SqlConnection(strCon) Dim adapter As New SqlDataAdapter Dim ds As New DataSet Dim strSql As String strSql = "Select * from SV" Try connection.Open() adapter = New SqlDataAdapter(strSql, strCon) adapter.Fill(ds) connection.Close() ds.WriteXml("D:\UED.XML") MsgBox("Done!") Catch ex As Exception MsgBox(ex.ToString) End Try b- Dùng đối tượng StreamWriter Imports System.Xml Imports System.Data.SqlClient Imports System.IO … Dim connection As SqlConnection Dim adapter As SqlDataAdapter Dim ds As New DataSet Dim sql As String Dim strXML As String Dim SqlCon As String = "Data Source=NDT\SQLExpress;Initial Catalog=SV;_ User ID=TH;Password=1234; Trusted_Connection=Yes" connection = New SqlConnection(SqlCon) sql = "select * from SV for xml auto" Try connection.Open() adapter = New SqlDataAdapter(sql, SqlCon1) adapter.Fill(ds) connection.Close() strXML = "" strXML &= "" & ds.Tables(0).Rows(0).Item(0) & "" Using writer As StreamWriter = New StreamWriter("D:\UED.xml") writer.Write(strXML) End Using MsgBox("Done") Catch ex As Exception MsgBox(ex.ToString) End Try c- Dùng phương thức getXML đối tượng DataSet Ví dụ sau dùng sở liệu MS Access 2003 để minh họa cho cách sử dụng OLEDB Imports System.Xml Imports System.Data.SqlClient … Dim strSQL As String = "Select * from SV" Dim path As String = "D\QLSV.MDB" Dim objDataSet As New DataSet Dim objCon As OleDbConnection Dim strCon As String Dim xmlDoc As New XmlDocument strCon = "Provider=Microsoft.Jet.OleDb.4.0;Data Source=" & path objCon = New OleDbConnection(strCon) Dim objAdapter As New OleDbDataAdapter(strSQL, objCon) objAdapter.Fill(objDataSet) objCon.Close() xmlDoc.LoadXml(objDataSet.GetXml()) xmlDoc.Save("D:\UED.XML") MsgBox("Export completed!") III.4 Sử dụng CSDL MySQL Việc chuyển đổi liệu MySQL thành liệu XML với PHP nêu trên, nhiên môi trường Net Framework cần tiến hành số cài đặt bổ sung: Tải phần mềm mysql-connector-net.exe địa chỉ: (chọn phiên phù hợp): http://dev.mysql.com/downloads/connector/net/1.0.html Khi tham chiếu name space, thực thi phương thức, sử dụng thuộc tính ý đến tiền tố MySQL thay SQL Sau ví dụ: Imports MySql.Data.MySqlClient Imports System.IO Dim Dim Dim Dim myCommand As New MySqlCommand myAdapter As New MySqlDataAdapter myData As New DataSet table As String = "SV" Dim strSQL As String = "Select * from SV" Dim conn = New MySqlConnection() conn.ConnectionString = "server=localhost; user id=root; password='';_ database=qlsv" Try conn.Open() Try myCommand.Connection = conn myCommand.CommandText = strSQL myAdapter.SelectCommand = myCommand myAdapter.Fill(myData, table) myData.WriteXml("C:\ued.xml") MsgBox("Done!") Catch myerror As MySqlException MsgBox("There was an error reading from the database" _ & myerror.message ) End Try Catch myerror As MySqlException MessageBox.Show("Error connecting to the database") Finally If conn.State ConnectionState.Closed Then conn.Close() End Try IV Tài liệu tham khảo [1] Hà Quang Thụy (chủ biên), Giáo trình Khai phá liệu Web, nxb Giáo dục, Hà Nội, 2009 [2] Hiroshi Maruyama cộng sự, XML and Java, Developing Web Application, nxb Addison Wesley, 2002 [3] Dương Quang Thiện, Lập trình web, tập 5, nxb Tổng hợp TP HCM, 2005 [4] Phạm Hữu Khang, Lập trình ASP.NET 2.0, 4, nxb Lao động-Xã hội, Hà Nội, 2007 [5] Nguyễn Tiến Huy, Giáo trình Công nghệ XML Ứng dụng, download từ địa : http://www.ebook.edu.vn/?page=1.39&view=11061 ... phương pháp chuyển đổi liệu quan hệ sang liệu XML III.1 Tổng quan phương pháp Cốt lõi phương pháp chuyển đổi liệu lưu DataSet hay liệu trả phương thức ExecuteScalar thành Stream XML - Với đối... SV for xml auto,_ elements",_ objConn) Dim strXML As String = objCmd.ExecuteScalar.ToString strXML="< ?xml version=’1.0’?>" strXML &= "" & strXML & "" xmlDoc.LoadXml(strXML) xmlDoc.Save("D:UED .XML" )... objAdapter.Fill(objDataSet) objCon.Close() xmlDoc.LoadXml(objDataSet.GetXml()) xmlDoc.Save("D:UED .XML" ) MsgBox("Export completed!") III.4 Sử dụng CSDL MySQL Việc chuyển đổi liệu MySQL thành liệu XML với PHP nêu trên,

Ngày đăng: 04/12/2015, 03:32

Tài liệu cùng người dùng

Tài liệu liên quan