<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
將SQLXML 3.0用起來( Web Services, XML Views, Managed Classes )
小氣的神
2002-5-25
Article Type: Overview
難度等級:5/9
版本:4.16
使用HTTP訪問SQL Server的多種方式
首先我們可以通過Http協議訪問SQL 2000, 並且藉助SQL 2000中Transact-SQL SELECT語句的FOR XML,可以直接執行SQL語句並且從數據庫中產生XML文檔,並且返回給請求者。
基本上我們通過Http協議可以使用五種方式來直接獲得XML文檔:
1. 將SQL查詢語句直接放在URL中。
比如下面的URL:
http://ibmthinka30/Northwind/?sql=select+*+FROM+Employees+FOR+XML+AUTO&root=root
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
2. 直接在URL中指定一個模板。
比如下面就是直接在URL中指定一個模板文件(老實說URL太長了一點先Copy下來再試)
3. 在URL中指明通過一個模板來訪問。
這種方式下需要預先設定一下,像上面設定WebService方式一樣,我們這次先建立一個目錄,然後再設置,比如實際的目錄(Path)是:D:/myProject/SQLXMLVDIR/Northwind/Templates, 目錄名(Name)叫: Templates; 選擇類型是:templates
然後我們快速的建立一個測試的模板文件放到這個目錄中,比如:selectemployees.xml.
裏面可以是上面URL的內容:
<root xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:query> SELECT * FROM Employees FOR XML AUTO </sql:query> </root> |
我們可以輸入這樣的URL:http://IBMThinkA30/Northwind/Templates/selectemployees.xml
4. 對於URL指定的映射文件進行一個XPath查詢。
這種方式也需要預先設定一下,像上面設定模板方式一樣,我們這次先建立一個目錄,然後再設置,比如實際的目錄(Path)是:D:/myProject/SQLXMLVDIR/Northwind/Schemas, 目錄名(Name)叫: Schemas; 選擇類型是:schema
接着建立一個模板文件(或說Schema文件)比如是:EmployeesXPath.xml
<?xml version="1.0" ?> <Schema xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes" xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <ElementType name="Employees" sql:relation="Employees" > <AttributeType name="EmployeeID" /> <AttributeType name="FirstName" /> <AttributeType name="LastName" /> <attribute type="EmployeeID" /> <attribute type="FirstName" /> <attribute type="LastName" /> </ElementType> </Schema> |
之後我們輸入這樣的URL:
http://ibmthinka30/Northwind/Schemas/EmployeesXPath.xml/Employees[@EmployeeID="3"]
5. 直接在URL中指定數據庫對象(如果你知道)。
該功能我們要先設置一個新的目錄名(name)是:dbObject, 其類型(Type)是:dbobject。目前只限於用在單表的單行單列上,需要具體指明到列名。由於它幾乎專門用於二進制構成的數據庫的單列,所以這種方式幾乎極少被普遍應用。
比如:http://ibmthinka30/Northwind/dbObject/Employees[@EmployeeID='1']/@Photo
或http://ibmthinka30/Northwind/dbObject/Employees[@EmployeeID='6']/@FirstName
實際應用更鼓勵我們使用模板,使用模板和直接執行SQL語句有同樣的作用,模板文件可以完成這樣的功能:
1. 進行SQL查詢和XPath查詢。
2. 向模板的SQL語句傳遞參數。
3. 爲返回的XML文檔指定一個根元素。
4. 對返回的結果應用XSL文件。
5. 爲返回的XML文檔指定命名空間。
這不僅僅因爲模板可以完成更多的功能,而且更安全和有封裝性。模板是一個基於Microsoft XML-SQL命名空間的XML文檔,一般它至少包括一個SQL的查詢語句。通過虛擬名稱對應的目錄,我們可以管理這些模板,而用戶是通過指定模板名稱來存取數據。正如我們在設置時看到的,它的類型(Type)是:Template,在dotNET Class API函數中它一般對應於SqlXmlCommandType.Template或SqlXmlCommandType.Template。模板是開發基於Web應用中允許用戶瀏覽數據的最常用的方法。當然還有另外一種模板文件,這裏我們稱呼它爲映射文件(Schema file).映射文件是一個基於Schema的XML文檔。現在我們可以將Schema中的元素或屬性映射到數據庫的表和列。那麼我們不僅可以用映射文件檢索數據庫的數據,而且如果這些Schema文件是被用來定義貿易交換的B2B應用時,那麼現在你可以通過一些簡單的註解(Annotate)加到Schema文件中,從而透明的將XML文檔中的數據映射到數據庫中的表和列上。這種文件的類型(Type)一般是Schema,在dotNET Class API函數中一般會使用SqlXmlCommandType.XPath。
映射文件可以用來建立一個XML View,SQL 2000通過XML View支持XML的數據庫訪問。這就如同過去我們在SQL 2000中建立一個數據庫View,然後通過SQL查詢這個View獲得數據;而現在我們建立一個數據庫的XML View,然後通過XPath查詢這個View中的數據。映射文件和模板文件不同的地方是它們使用不同的格式定義語言來定義,並且映射文件也不簡單的只是被用於檢索數據。秉承Schema的最大優點就是它有比較多的數據類型和更利於我們統一編程(比如生成一個對應的Class)。接下來的問題是如何產生這種annotated XSD Schemas?這就是我們下面要看到的。
特別說明:
本文原創,CSDN署名首發,所有文字和圖片版權所有。未經授權請勿傳播、轉載或改編。
如果有問題或建議,請發電子郵件給[email protected]