SQL SERVER 2000新增的主要功能-支援XML

資策會數位教育研究所 向海驪

 

        隨著資料交換標準化需求的日益重要,以及XML技術不斷的推陳出新,SQL SERVER 2000版本在2000年上市時,新增的主要功能之一就是對XML的支援,除了可將查詢的結果轉換成XML格式外,亦可由XML文件內擷取資料並寫入到資料表,這些功能的組合使得SQL SERVER 2000成為可用於XML的資料庫伺服器。隨後Microsoft更經由網站不斷提供新版本的SQLXML工具組(至今已是3.0 SP1版本),讓應用程式開發者在.NET程式語言中,利用SQL SERVER 2000的XML功能搭配SQLXML Managed類別的使用,可以更方便的將XML與SQL SERVER 2000結合在一起。

SQL SERVER 2000 支援的XML功能包括:
可利用 HTTP 存取 SQL Server:
   • 在URL中直接執行SQL指令。
   • 在URL中使用範本檔來存取資料庫。

可擷取及寫入 XML 資料:
   • 利用 SELECT 陳述式及 FOR XML 子句將查詢結果轉成XML格式。
   • 利用 OPENXML 陳述式及INSERT指令將XML資料寫入資料表。
   • 利用 XPath 查詢語言來擷取 XML 資料。

支援 XDR (XML-Data Reduced) 結構描述(schema):
   • XDR schema 用來描述XML文件的結構,並可定義其與資料表及資料行之間的對應關係,如同建立了資料表的XML檢視表。
   • 針對XML檢視表可進行 XPath 查詢。
Microsoft SQL Server 2000 OLE DB Provider (SQLOLEDB) 的增強部分讓 XML 文件可設定為命令文字並以資料流傳回結果集。

        當使用者透過瀏覽器以HTTP方式對SQL Server進行查詢時,實際上是以IIS伺服器做橋樑,將查詢轉往SQL Server處理,因此首先要利用SQL Server 2000所提供的「設定IIS中的SQL XML 支援」進行IIS伺服器和SQL Server之間的連線設定,設定完成後,使用者才能用瀏覽器以HTTP方式對SQL Server進行查詢。IIS伺服器和SQL Server之間除了透過OLEDB介面外還需透過SQL Server 2000的XML元件(sqlisapi.dll和sqlxml.dll)才能進行相關的處理工作。

        除了可以使用瀏覽器以HTTP方式對SQL Server進行查詢外,亦可以透過應用程式查詢SQL SERVER 的資料並轉換為XML文件,接下來就讓我們實作一個範例: 從SQL SERVER 2000的資料庫NorthWind中,讀取資料表Products,將查詢結果轉成XML格式並存成.xml檔案。 該範例採用VB.NET程式語言,利用SQL SERVER 2000的FOR XML 子句,搭配SQLXML中SqlXmlCommand Class的使用,輕易的便可完成。
實作該範例前,你必須已安裝好SQL SERVER 2000及 SQLXML 3.0 SP1(可從http://msdn.microsoft.com/sqlxml 自行下載安裝),另外在VB.NET專案中要加入參考 Microsoft.Data.SqlXml。
 

  Imports Microsoft.Data.SqlXml
  Imports System.IO
  Public Class Form1
  Inherits System.Windows.Forms.Form
  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  Dim nwConnString As String
  Dim cmd As SqlXmlCommand
  Dim f As FileStream
  nwConnString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial     Catalog=Northwind;Data Source=(local)"
  cmd = New SqlXmlCommand(nwConnString)
  cmd.RootTag = "products"
  cmd.CommandType = SqlXmlCommandType.Sql
  cmd.CommandText = "select * from products for XML auto"
  f=New fileStream("c:\temp\products.xml",FileMode.Create)
  cmd.ExecuteToStream(f)
  f.Close()
  End Sub

        看完了範例後是不是對SQL SERVER 2000的XML功能比較有一點概念呢?!如果希望對SQL SERVER 2000的XML功能或SQLXML Managed Classes多一點了解,除了一般的SQL SERVER 2000書籍、SQL SERVER 2000線上叢書及SQLXML 3.0說明文件外,可以參考 http://www.microsoft.com/sql/techinfo/xml網站上相關的白皮書。