熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> SQL Server >> 正文

通過HTTP訪問SQL Server 2000

2022-06-13   來源: SQL Server 

  一建立訪問SQL Server 的虛擬目錄
  
    在通過HTTP訪問SQL Server 數據庫之前你必須設置一個適當的虛擬目錄利用SQL Server工具集中IIS虛擬目錄管理器 (在SQL Server Tools程序組中點擊Configure SQL XML Support啟動該工具)在運行IIS的機器上定義並注冊一個新的虛擬目錄 該工具指導IIS在虛擬目錄與SQL Server實例之間建立關聯
  
    IIS 服務器的名字與虛擬目錄必須作為URL的一部分虛擬目錄的信息(包括登錄名口令和訪問權限)用於建立與指定數據庫的連接並執行查詢 URL可被定義為
     
   直接訪問數據庫對象例如表    
   執行模板文件     
   執行XPath查詢
  
    建立XML虛擬目錄示例
  
    該示例演示建立一個訪問SQL Server 的IIS虛擬目錄的全過程
  
    在Microsoft SQL Server程序組點擊Configure SQL XML Support in IIS
    展開一個服務器然後點擊一個WEB站點
    在選擇的WEB站點上單擊右鍵將鼠標移至新建(N)點擊Virtual Directory
    在New Virtual Directory Properties的General頁輸入虛擬目錄名在此例中輸入XML及物理路徑  (例如C\Interpub\Wwwroot\xml假設你已在C\Interpub\Wwwroot目錄中建立xml子目錄)你也可使用Browse按鈕選擇一個目錄
    在Security頁選擇SQL Server並輸入合法的SQL Server登錄信息
    在Data Source頁在SQL Server框中輸入服務器名例如(local)當服務器上存在多個SQL Server實例時還需指定實例名在Database框輸入默認數據庫名如test假如你的服務器上有這個名稱的數據庫
    在Settings頁選擇Allow URL queriesAllow template queriesAllow XPath及Allow POST選項
    在Virtual Names頁點擊New為template(模板)建立虛擬目錄
      在Virtual Name Configuration對話框的Virtual name框中輸入template(或其他名字)在Type列表 中選擇template輸入路徑(例如C:\Inetpub\Wwwroot\xml\template假設已建立該目錄)點擊Save保存虛擬目錄名
    其他類型如objectschema的虛擬目錄建立同上
    點擊O 4嫔柚謾?
  
    如此建立了一個xml虛擬目錄為測試該虛擬目錄浏覽器地址欄輸入
   //$#@;IISServer$#@;/xml?sql=SELECT*FROM+Sysobjects+WHERE+xtype=
      u+FOR+XML+AUTO&root=root並回車
  
    注意
    為防止不希望的訪問建議為該目錄建立一個專門的SQL Server登錄帳號並取消該帳號所有不必要的權限尤其是DELETEDROPCREATE PROC權限 最好禁止在該虛擬目錄直接執行SQL語句永遠不要將SA帳號作為該虛擬目錄的登錄帳號
  
    二利用HTTP執行SQL語句
  
    Microsoft SQL Server 可通過在URL中執行查詢直接訪問(假如注冊虛擬目錄時選擇了允許URL查詢)客戶端可通過HTTP的GET和POST方法提交請求
  
    示例
    在下述例子中xml是用於訪問test數據庫的虛擬目錄
    在查詢示例中如果查詢返回多個元素根元素可通過以下方法之添加
    
   在查詢前添加SELECT $#@;ROOT$#@;並在其後添加SELECT $#@;/ROOT$#@;   
   傳遞一個root關鍵字作為查詢的參數其值為ROOT(或其他任何值)
  
    定義一個簡單查詢
    下例返回數據庫test中所有用戶定義表的名字及建立日期
   //IISserver/xml?sql=select+name
      crdate+from+sysobjects+where+xtype= u+for+xml+auto&root=ROOT
  
    定義一個涉及多個表的查詢
    下例中查詢返回數據庫中所有用戶定義表的列的數據類型定義
  
   //IISServer/xml?sql= select+sname+as+表名sxtype+as+類別
      +cname+as+列名+tname+as+數據類型+clength+as+長度
      +from+sysobjects+ssystypes+tsyscolumns+c+where+sxtype=
      u+and+cid=object_id(sname)+and+cxtype=
      txtype+order+by++for+xml+auto&root=ROOT
  
    在查詢中定義特殊字符
    對於URL有特殊意義的字符將其替換為%數字的形式如SQL語句中的LIKE dt%正確寫法應是的LIKE dt%
  
    定義contenttype關鍵字
    contenttype關鍵字規定返回的文檔的contenttype在URL中未規定xsl參數text/XML文檔默認的contenttype在URL中規定xsl參數 默認的contenttype 是text/html
  
    定義xsl 關鍵字
    下例返回數據庫test中所有用戶定義表的名字及建立日期但這些信息經tablexsl處理後以表格形式顯示
   //IISserver/xml?sql=select+namecrdate+from+sysobjects
      +where+xtype=u+for+xml+auto&root=ROOT&xsl=tablexsl
  
  
  
    在該例中xsl文件存儲於該虛擬目錄中其內容如下
  
     $#@;?xml version= encoding=GB?$#@;
     $#@;xsl:stylesheet xmlns:xsl=xsl$#@;
     $#@;!根模板$#@;
     $#@;xsl:template match=/$#@;
     $#@;HTML$#@;$#@;BODY$#@;
     $#@;xsl:applytemplates select=ROOT/$#@;
     $#@;/BODY$#@;$#@;/HTML$#@;
     $#@;/xsl:template$#@;
     $#@;xsl:template match=ROOT$#@;
     $#@;TABLE border=$#@;
     $#@;xsl:foreach select=sysobjects[]/@*$#@;
     $#@;TH$#@;$#@;xsl:eval$#@;thisname$#@;/xsl:eval$#@;$#@;/TH$#@;
     $#@;/xsl:foreach$#@;
     $#@;xsl:applytemplates select=sysobjects/$#@;
     $#@;/TABLE$#@;
     $#@;/xsl:template$#@;
     $#@;xsl:template match=sysobjects$#@;
     $#@;TR$#@;
     $#@;xsl:foreach select=@*$#@;
     $#@;TD$#@;$#@;xsl:valueof/$#@;$#@;/TD$#@;
     $#@;/xsl:foreach$#@;
     $#@;/TR$#@;
     $#@;/xsl:template$#@;
     $#@;/xsl:stylesheet$#@;
  
    三利用HTTP執行模板文件
  
    在URL中編寫長的SQL查詢非常麻煩另一個方法是用模板定義查詢(SQL或XPath)模板文件名在URL中規定使用模板你能
    
   定義SQL查詢或XPath查詢   
   規定執行SQL或XPath查詢產生的XML片斷的頂級元素   
   定義能傳遞給SQL語句或XPath查詢的參數   
   聲明名字空間   
   定義應用結果文檔的XSL樣式表   
   另外如果將所有需要的查詢都通過模板定義並規定不允許在URL中直接執行SQL語句將帶來更好的安全性
  
    使用XML模板
    模板文件的一般格式是
  
     $#@;ROOT xmlns:sql=urn:schemasmicrosoftcom:xmlsql
     sql:xsl=XSL FileName $#@;
     $#@;sql:header$#@;
     $#@;sql:param$#@;$#@;/sql:param$#@;
     $#@;sql:param$#@;$#@;/sql:param$#@;n
     $#@;/sql:header$#@;
     $#@;sql:query$#@;
     sql statement(s)
     $#@;/sql:query$#@;
     $#@;sql:xpathquery mappingschema=SchemaFileNamexml$#@;
     XPath query
     $#@;/sql:xpathquery$#@;
     $#@;/ROOT$#@;
  
    在模板中所有部分都是可選的然而xmlns:sql=urn:schemasmicrosoftcom:xmlsql是必須的名字空間可命名為任何其他名字sql只是一個別名
  
    $#@;ROOT$#@;
     該標記規定XML文檔的頂級元素$#@;ROOT$#@;可取任意名字
    $#@;sql:header$#@;
     該標記用於包含頭信息在當前的實現只有$#@;sql:param$#@;能被置於該標記中
    $#@;sql:param$#@;
     該元素用於定義一個參數以傳遞給模板中的查詢每個$#@;param$#@;元素定義一個參數可以有多個$#@;param$#@;元素置於$#@;sql:header$#@;標記中
    $#@;sql:query$#@;
     該元素用於規定SQL查詢可以定義多個$#@;sql:query$#@;元素
    $#@;sql:xpathquery$#@;
     規定XPath查詢
    sql:xsl
     規定作用於XML文檔的XSL樣式表
    mappingschema
    該屬性用於標識XDR大綱
  
    注意每個$#@;sql:query$#@;或$#@;sql:XPathquery$#@;表示一個分離的事務因此如果在模板中有多個 $#@;sql:query$#@;或 $#@;sql:XPathquery$#@;標記如果其中一個失敗其他將繼續處理
  
    使用模板執行SQL查詢
    下例中xm
From:http://tw.wingwit.com/Article/program/SQLServer/201311/22035.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.