开店乐

开店乐电子商务研究 KaiDianLe.Com

网站地图 :

  搜索:

通过HTTP访问SQL Server 2000

    一、建立访问SQL Server 2000的虚拟目录

  在通过HTTP访问SQL Server 2000数据库之前,你必须设置一个适当的虚拟目录。利用SQL Server工具集中IIS虚拟目录管理器 (在SQL Server Tools程序组中点击Configure SQL XML Support启动该工具)在运行IIS的机器上定义并注册一个新的虚拟目录。 该工具指导IIS在虚拟目录与SQL Server实例之间建立关联。 【文章来源:开店乐www.KaiDianLe.Com

  IIS 服务器的名字与虚拟目录必须作为URL的一部分。虚拟目录的信息(包括登录名、口令和访问权限)用于建立与指定数据库的连接并执行查询。 URL可被定义为:
   
 直接访问数据库对象,例如表。    
 执行模板文件。     
 执行XPath查询。

  建立XML虚拟目录示例

  该示例演示建立一个访问SQL Server 2000的IIS虚拟目录的全过程:

  1、在Microsoft SQL Server程序组点击Configure SQL XML Support in IIS。
  2、展开一个服务器,然后点击一个WEB站点。
  3、在选择的WEB站点上单击右键,将鼠标移至“新建(N)”,点击“Virtual Directory”。
  4、在New Virtual Directory Properties的General页输入虚拟目录名。在此例中,输入XML及物理路径  (例如C:\Interpub\Wwwroot\xml,假设你已在C:\Interpub\Wwwroot目录中建立xml子目录)。你也可使用Browse按钮选择一个目录。
  5、在Security页,选择SQL Server并输入合法的SQL Server登录信息。
  6、在Data Source页,在SQL Server框中,输入服务器名,例如“(local)”,当服务器上存在多个SQL Server实例时,还需指定实例名。在Database框,输入默认数据库名,如test,假如你的服务器上有这个名称的数据库。
  7、在Settings页,选择Allow URL queries,Allow template queries,Allow XPath及Allow POST选项。
  8、在Virtual Names页,点击New为template(模板)建立虚拟目录。
    在Virtual Name Configuration对话框的Virtual name框中输入template(或其他名字)。在Type列表 中,选择template。输入路径(例如:C:\Inetpub\Wwwroot\xml\template,假设已建立该目录。)点击Save保存虚拟目录名。
  9、其他类型如object、schema的虚拟目录建立同上。
  10、点击O 4嫔柚谩?

  如此,建立了一个xml虚拟目录。为测试该虚拟目录,浏览器地址栏输入
  http://$#@60;IISServer$#@62;/xml?sql=SELECT*FROM+Sysobjects+WHERE+xtype=
    "u"+FOR+XML+AUTO&root=root并回车。

  注意:
  为乐共幌M姆梦剩ㄒ槲媚柯冀⒁桓鲎诺腟QL Server登录帐号,并取消该帐号所有不必要的权限,尤其是DELETE、DROP、CREATE PROC权限, 最好禁止在该虚拟目录直接执行SQL语句。永远不要将SA帐号作为该虚拟目录的登录帐号。

  二、利用HTTP执行SQL语句

  Microsoft SQL Server 2000可通过在URL中执行查询直接访问(假如注册虚拟目录时选择了允许URL查询)。客户端可通过HTTP的GET和POST方法提交请求。

  示例
  在下述例子中,xml是用于访问test数据库的虚拟目录。
  在查询示例中,如果查询返回多个元素,根元素可通过以下方法之添加:
  
 在查询前添加SELECT "$#@60;ROOT$#@62;",并在其后添加SELECT "$#@60;/ROOT$#@62;"。   
 传递一个root关键字作为查询的参数,其值为ROOT(或其他任何值)

  1、定义一个简单查询
  下例返回数据库test中所有用户定义表的名字及建立日期。
  http://IISserver/xml?sql=select+name,
    crdate+from+sysobjects+where+xtype= "u"+for+xml+auto&root=ROOT

  2、定义一个涉及多个表的查询
  下例中查询返回数据库中所有用户定义表的列的数据类型定义。

  http://IISServer/xml?sql= select+s.name+as+表名,s.xtype+as+类别,
    +c.name+as+列名,+t.name+as+数据类型,+c.length+as+长度
    +from+sysobjects+s,systypes+t,syscolumns+c+where+s.xtype=
    "u"+and+c.id=object_id(s.name)+and+c.xtype=
    t.xtype+order+by+1,2+for+xml+auto&root=ROOT

  3、在查询中定义特殊字符
  对于URL有特殊意义的字符,将其替换为“%数字”的形式,如SQL语句中的“LIKE "dt%"”正确写法应是的“LIKE "dt%25"”。

  4、定义contenttype关键字
  contenttype关键字规定返回的文档的content-type。在URL中未规定xsl参数text/XML文档默认的content-type。在URL中规定xsl参数, 默认的contenttype 是text/html.

  5、定义xsl 关键字
  下例返回数据库test中所有用户定义表的名字及建立日期。但这些信息经table.xsl处理后以表格形式显示。
  http://IISserver/xml?sql=select+name,crdate+from+sysobjects
    +where+xtype="u"+for+xml+auto&root=ROOT&xsl=table.xsl

   在该例中,.xsl文件存储于该虚拟目录中。其内容如下:

   $#@60;?xml version="1.0" encoding="GB2312"?$#@62;
   $#@60;xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"$#@62;
   $#@60;!--根模板--$#@62;
   $#@60;xsl:template match="/"$#@62;
   $#@60;HTML$#@62;$#@60;BODY$#@62;
   $#@60;xsl:apply-templates select="ROOT"/$#@62;
   $#@60;/BODY$#@62;$#@60;/HTML$#@62;
   $#@60;/xsl:template$#@62;
   $#@60;xsl:template match="ROOT"$#@62;
   $#@60;TABLE border="1"$#@62;
   $#@60;xsl:for-each select="sysobjects[0]/@*"$#@62;
   $#@60;TH$#@62;$#@60;xsl:eval$#@62;this.name$#@60;/xsl:eval$#@62;$#@60;/TH$#@62;
   $#@60;/xsl:for-each$#@62;
   $#@60;xsl:apply-templates select="sysobjects"/$#@62;
   $#@60;/TABLE$#@62;
   $#@60;/xsl:template$#@62;
   $#@60;xsl:template match="sysobjects"$#@62;
   $#@60;TR$#@62;
   $#@60;xsl:for-each select="@*"$#@62;
   $#@60;TD$#@62;$#@60;xsl:value-of/$#@62;$#@60;/TD$#@62;
   $#@60;/xsl:for-each$#@62;
   $#@60;/TR$#@62;
   $#@60;/xsl:template$#@62;
   $#@60;/xsl:stylesheet$#@62;

  三、利用HTTP执行模板文件

  在URL中编写长的SQL查询非常麻烦,另一个方法是,用模板定义查询(SQL或XPath)。模板文件名在URL中规定。使用模板你能:
  
 定义SQL查询或XPath查询。   
 规定执行SQL或XPath查询产生的XML片断的顶级元素。   
 定义能传递给SQL语句或XPath查询的参数。   
 声明名字空间   
 定义应用结果文档的XSL样式表。   
 另外,如果将所有需要的查询都通过模板定义,并规定不允许在URL中直接执行SQL语句,将带来更好的安全性。

   使用XML模板
  模板文件的一般格式是:

   $#@60;ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"
   sql:xsl="XSL FileName" $#@62;
   $#@60;sql:header$#@62;
   $#@60;sql:param$#@62;..$#@60;/sql:param$#@62;
   $#@60;sql:param$#@62;..$#@60;/sql:param$#@62;...n
   $#@60;/sql:header$#@62;
   $#@60;sql:query$#@62;
   sql statement(s)
   $#@60;/sql:query$#@62;
   $#@60;sql:xpath-query mapping-schema="SchemaFileName.xml"$#@62;
   XPath query
   $#@60;/sql:xpath-query$#@62;
   $#@60;/ROOT$#@62;

  在模板中所有部分都是可选的。然而xmlns:sql="urn:schemas-microsoft-com:xml-sql"是必须的。名字空间可命名为任何其他名字,sql只是一个别名。

  $#@60;ROOT$#@62;
   该标记规定XML文档的顶级元素。$#@60;ROOT$#@62;可取任意名字。
  $#@60;sql:header$#@62;
   该标记用于包含头信息。在当前的实现,只有$#@60;sql:param$#@62;能被置于该标记中。
  $#@60;sql:param$#@62;
   该元素用于定义一个参数以传递给模板中的查询。每个$#@60;param$#@62;元素定义一个参数,可以有多个$#@60;param$#@62;元素置于$#@60;sql:header$#@62;标记中。
  $#@60;sql:query$#@62;
   该元素用于规定SQL查询,可以定义多个$#@60;sql:query$#@62;元素,
  $#@60;sql:xpath-query$#@62;
   规定XPath查询。
  sql:xsl
   规定作用于XML文档的XSL样式表。
  mapping-schema
  该属性用于标识XDR大纲。

  注意:每个$#@60;sql:query$#@62;或$#@60;sql:XPath-query$#@62;表示一个分离的事务。因此,如果在模板中有多个 $#@60;sql:query$#@62;或 $#@60;sql:XPath-query$#@62;标记,如果其中一个失败,其他将继续处理。

  使用模板执行SQL查询
  下例中,xml是使用IIS Virtual Directory Management for SQL Server utility建立的虚拟目录,template是建立该虚拟目录时为template类型定义的虚拟名。

  示例
  建立一个简单的SELECT模板

   $#@60;?xml version="1.0" encoding="gb2312"?$#@62;
   $#@60;ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"$#@62;
   $#@60;sql:query$#@62;
   select name,crdate
   from sysobjects
   where+xtype="u"
   for xml auto
   $#@60;/sql:query$#@62;
   $#@60;/ROOT$#@62;

  该模板保存至一个文件(first.xml),使用下面的URL执行:
  http://IISServer/xml/template/first.xml

  传递参数至模板文件
  SQL查询的参数值可在模板中规定。$#@60;sql:header$#@62;用于定义参数,参数可赋给默认值。默认值在执行模板文件但未提供参数值时使用。

  将上面的模板文件改造为:

   $#@60;?xml version="1.0" encoding="gb2312"?$#@62;
   $#@60;ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"$#@62;
   $#@60;sql:header$#@62;
   $#@60;sql:param name="type"$#@62;u$#@60;/sql:param$#@62;
   $#@60;/sql:header$#@62;
   $#@60;sql:query$#@62;
   select name,crdate
   from sysobjects
   where+xtype=@type
   for xml auto
   $#@60;/sql:query$#@62;
   $#@60;/ROOT$#@62;

  保存上述文件,用下面的URL执行:
  http://IISServer/xml/template/first.xml&type=p
  即可得到存储过程的名字及建立日期

6

  在模板中规定XSL样式表
  XSL样式表可用于处理查询结果。使用HTTP执行一个模板时,可以下述方法之前规定一个XSL文件:
  
 在模板中使用sql:xsl属性。   
 在URL中规定使用xsl关键字规定XSL文件。

  如果在模板文件及URL中均定义了XSL样式表文件,那么模板中规定的XSL文件首先处理查询结果,处理后的文件再由在URL中以关键字xsl规定的XSL文件进行处理作为最终的输出结果。

  示例
  将上例的模式文件first.xml改造为下面的形式:

   $#@60;?xml version="1.0" encoding="gb2312"?$#@62;
   $#@60;ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql" sql:xsl="table.xsl"$#@62;
   $#@60;sql:header$#@62;
   $#@60;sql:param name="type"$#@62;u$#@60;/sql:param$#@62;
   $#@60;/sql:header$#@62;
   $#@60;sql:query$#@62;
   select name,crdate
   from sysobjects
   where+xtype=@type
   for xml auto
   $#@60;/sql:query$#@62;
   $#@60;/ROOT$#@62;

  将前面建立的XSL文件table.xsl拷贝至first.xml所在目录。以下面的URL执行:
  http://IISServer/xml/template/first.xml&type=p

  由于经XSL文件处理后的查询结果实际上一个HTML文件,因此在URL中规定返回结果的文档类型,其URL如下:
  http://IISServer/xml/template/first.xml&type=p&contenttype=text/html

  备注

  1、只要权限允许,在模板文件中可应用的SQL语句还包括执行存储过程、建立表、数据库、删除表、数据库等,几乎所有合法的SQL语句都可执行,因此必须密切关注安全问题。永远不要将SA作为IIS连接SQL Server 2000的登录帐户。
  2、欲了解更多信息请参考SQL Server 2000的Books Online中XML and Internet Support章节。
  3、欲了解更多有关XSL的资料,在SQL Server 2000的Books Online首页上点击“Microsoft Data Access Component (MDAC) 2.6 and Extensible Markup Language (XML) 2.6 Documentation”;

【日期:2006-8-7】【作者:不祥】【转载自:开店乐】

相关文章:
 最好的网上开店系统:凡人网络购物系统免费下载
 SQL Server存储过程编写和优化措施
 SQL Server日志文件丢失的恢复方法
 SQL Server2000数据库系统表的应用
 品味SQL Server 2005的几个新功能
 SQL Server2000 索引结构及其使用
 SQL Server 中的几个函数要记录
 用SQL存储过程实现批量插入数据
 获取SQL Server服务器的当前连接数
 记存储过程中经常用到的本周\本月\本年函数
 数据库安全--应用IDS保卫数据库
 远程连接SQL Server服务器的解决方案
 SQL Server数据库定时自动备份
 升级到SQLServer2005的10大理由
 攻破SQL服务器的十种方法
 SQL Server安全规划全攻略
 SQL Server 服务器安装剖析
 大型数据库的SQL查询优化技巧
 优化SQL Server服务器内存配置的策略
 SQL服务器外网IP测试故障解决
 SQL SERVER 2000 SP4新特性概述
 Access与Sql Server之ASP代码比较
 通过作业定时同步服务器上的数据
 比较两个数据库的表结构差异
 不破坏原加密存储的存储解密
 优化--让你的SQL运行速度明显提高
 SQL Server数据库的备份与恢复
 数据库学习:查询区分大小写
 查询指定的表在那些数据库中存在
 Web环境下SQL中数据的磁带备份与恢复
 SQL Server里函数的两种用法
 SQL语法参考手册
 SQL数据库的六种数据移动方法
 Access转换成为SQL Server
 数据变换和转换注意事项(SQL)
 SQL语句性能调整原则
 SQL实现从数据库中随机抽N条记录
 怎样能限制SQL Server只能让指定的机器连接
 SQL存储过程入门与提高
 SQL Server端口更改后的数据库连接方式
 怎样设置SQL Server的用户及权限
 关于SQL语句查询分页数据的解决方案
 关于sql数据库维护失败的问题查找方法
 SQL Server与Excel数据互导
 减少动态SQL语句的预编译时间
 一个完整的SQL SERVER数据库全文索引的示例
 如何让你的SQL运行得更快
 MS-SQL server数据库开发精典技巧
 MSSQL按分页返回查询结果的存储过程
 MySQL 4.1.0 中文参考手册[连载]
 数据库访问技术
 SQL语言快速入门
 JDBC驱动程序的类型
 Microsoft的MSDN里面对ODBC的介绍
 JDBC1.2中几个最重要的接口和类
 SQL7.0储存过程调试
 UDA技术综述
 SQL Server的存储过程调用Com组件
 通过HTTP访问SQL Server 2000
 数据库应用程序需注意的问题
 SQL Server安全性简介
 用COM自动服务扩展SQL Server功能
 全面接触SQL语法
 SQL Server 2005数据库升级要点和技巧
 多条件数据库查询的优化方法
 如何解决SQL Server服务器耗尽内存的情况
 SQL Server的空值处理策略
 利用数据库日志恢复数据到时间点的操作
 得出SQL语句的执行时间的方法
 SQL Server2000数据库文件损坏时如何恢复
 在SQL Server 2000里设置和使用数据库复制
 修改系统密码后SQL服务器无法启动解决
 远程检测MS SQL Server账号安全性
 基于角色的方式管理SQL Server安全
 针对MS SQL SERVER的安全防御方案
 SQL Server补丁安装常见问题
 保护SQL Server:为安全性而安装
 SQL Server数据库安全规划全攻略
 SQL Server 2000 客户端实用程序小技巧
 SQL Server到Oracle连接服务器的实现
 把Access数据库移植到SQL
 避免Access和SQL Server的空值冲突
 用SQL Server保持会话状态
 两个SQL Server维护技巧
 Sql Server全文搜索中文出错的问题
 SQL Server备份的三个恢复模型
 利用BCP恢复SQL Server 2000数据库
 常用SQL字符串函数问题集锦
 SQL语句--如何替换字符串中的个别字符?
 MSSQL Ntext中的字段替换处理存储过程
 SQL中将一列数据分成三列来显示的方法
 SQL SERVER中替换text,ntext列中的字符串
 SQL存储过程来建立自动备份数据库
 Microsoft SQL Server 数据库维护计划
 两台Sql Server数据同步解决方案
 用SHA1或MD5 对用户身份验证的简单实现
 SQL Server开发的二十一条军规
 一个四用户信息同步更新的存储过程
 SQL Server中如何计算农历
 SQL Server安全设置清单列表
 SQL Server存储过程入门与提高

版权所有:Kaidianle.Com  联系方式:Shnxn@Yhaoo.Com.Cn 京ICP备06028743号 在线留言