数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

通过HTTP访问SQL Server 2000


发布日期:2024年07月06日
 
通过HTTP访问SQL Server 2000

建立访问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               

上一篇:SQL Server同Index Server的结合应用3/3

下一篇:SQL Server连接ACCESS数据库的具体实现