国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設(shè)計 > 正文

深入探討SQL Server 2000對XML的支持(三)

2019-11-18 14:47:33
字體:
供稿:網(wǎng)友

  使用xml模板進行查詢

  SQL Server 2000通過在HTTP請求中內(nèi)嵌SQL語句的功能顯然是非常強大并且有用的。但是這種見也隱藏著極大的隱患,一旦某個最終用戶了解了直接使用瀏覽器查詢數(shù)據(jù)庫的方法,那么數(shù)據(jù)庫中的數(shù)據(jù)就很危險了,因為最終用戶可能會嘗試執(zhí)行他自己的insert,update甚至是delete過程。

  為了維護大部分數(shù)據(jù)庫中數(shù)據(jù)交易的安全,使用戶不能夠直接使用URL進行查詢,SQL Server 2000介紹了XML模板的概念,可以設(shè)置SQL Server虛擬目錄把這些URL查詢導(dǎo)向那些含有所需的SQL過程的XML模板中。

  在我們討論模板概念之前,讓我們重新回到SQL Server的IIS虛擬目錄治理器中,進入“設(shè)置”選項卡。為了防止用戶使用HTTP訪問,我們必須把“答應(yīng) URL 查詢”選項給去掉。所有SQL查詢現(xiàn)在都會被導(dǎo)向XML模板,XPath中。

  為了答應(yīng)XML模板執(zhí)行SQL查詢,進入“虛擬名稱”選項卡,并單擊新建按鈕,新建一個模板文件夾,取名為templates,在下拉菜單中選擇template。然后,要么輸入一個你的 XML模板將儲存的路徑或者單擊“瀏覽”按鈕。本例中使用C:Inetpubwwwrootxml emplates。一旦你已經(jīng)提供了所有的必要的信息,請單擊“保存”按鈕。

  現(xiàn)在一個虛擬目錄已經(jīng)被映射到一個指定來保存 XML查詢模板的文件夾,讓我們創(chuàng)建一個有效的 XML模板,用來執(zhí)行 SQL查詢。下面的代碼是一個模板示例。


  file2.xml

<Northwind xmlns:sql=
"urn:schemas-microsoft-com:xml-sql">
<sql:query>
SELECT Customers.CustomerID, Customers.ContactName,
Orders.OrderID, Orders.CustomerID
FROM Customers
INNER JOIN Orders
ON Customers.CustomerID = Orders.CustomerID
FOR XML AUTO
</sql:query>
</Northwind>



  這段代碼中使用了一個名為sql的前綴和一個URI urn:schemas-microsoft-com:xml-sql,這個前綴用來標識使用在 SQL Server XML ISAPI上的元素。有一個元素名為query,顧名思義它就是用來標記模板文件中的SQL 查詢語句。好,讓我們來演示一下如何使用這個模板吧!請在地址欄中輸入,http://localhost/northwind/templates/file2.xml,當然你也可以根據(jù)你的需要改變相應(yīng)的服務(wù)器名和虛擬目錄名。

  讓我們把這個 URL拆分成單獨的片段,進行分析,你可以看見,我們先使用了 northwind虛擬根,然后使用templates虛擬目錄名,如前我們說過,該虛擬目錄名已經(jīng)映射到templates的物理目錄中。最后, URL給出了模板文件的名稱。執(zhí)行這個模板,瀏覽器就會把表中customers元素下嵌套的不同的訂單以XML文檔的形式顯示出來。

  使用模板而不使用 URL查詢有許多優(yōu)點。首先,現(xiàn)在一個最終用戶就沒有改變SQL語句的權(quán)力了,去除“通過URL查詢訪問 SQL Server服務(wù)器”的選項 ,就只有SQL Server XML ISAPI可以用來處理模板文件,這就避免未經(jīng)授權(quán)的 插入、更新和刪除程序被執(zhí)行。其次, XML模板支持動態(tài)加入?yún)?shù),這就答應(yīng)你不用更改模板文件就可以更改一個 SQL WHERE子句的值。

  使用參數(shù),就像插入一個 XML header元素一樣簡單的,在 header元素中,定義了一個 param元素,使用一個值為CustomerID的名稱屬性。這個參數(shù)被賦予一個默認值"A",你可以象在一個存儲過程中一樣在模板文件中使用這個參數(shù),只要在這個參數(shù)前添加一個@,然后把它放入SQL語句或用來調(diào)用一個存儲過程就可以了。請見下面的代碼。

<Northwind xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<sql:header>
<sql:param name='CustomerID'>A</sql:param>
</sql:header>
<sql:query>
SELECT Customers.CustomerID, Customers.ContactName,
Orders.OrderID, Orders.CustomerID
FROM Customers
INNER JOIN Orders
ON Customers.CustomerID = Orders.CustomerID
WHERE Customers.CustomerID LIKE @CustomerID + '%'
FOR XML AUTO
</sql:query>
</Northwind>


  在本例中,CustomerID參數(shù)被一個WHERE子句使用。假如把參數(shù)設(shè)為"B",SQL 語句就會從Customers和Orders表中返回所有的CustomerID以B開頭的行。調(diào)用模板并傳遞正確的CustomerID參數(shù)值,只要在查詢字符串之后加上參數(shù)名和參數(shù)值,如:http://localhost/northwind/templates/file2.xml?CustomerID=B即可,就這么簡單。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 马尔康县| 桐乡市| 和硕县| 庆阳市| 宜都市| 柏乡县| 比如县| 淳化县| 丘北县| 莎车县| 桦南县| 厦门市| 泽州县| 乐安县| 安国市| 龙山县| 桐乡市| 九江市| 九寨沟县| 神农架林区| 玉龙| 霍邱县| 麻江县| 应用必备| 罗山县| 娄烦县| 眉山市| 马龙县| 广河县| 岳普湖县| 浪卡子县| 长泰县| 周至县| 宁城县| 南和县| 常熟市| 桂平市| 开远市| 普宁市| 宝应县| 德兴市|