深入探讨SQL Server 2000对XML的支持(三)

来源:互联网 发布:淘宝14年老店有哪些 编辑:程序博客网 时间:2024/05/18 00:21
<script type="text/javascript">google_ad_client = "pub-8800625213955058";/* 336x280, 创建于 07-11-21 */google_ad_slot = "0989131976";google_ad_width = 336;google_ad_height = 280;//</script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>使用XML模板进行查询  SQL Server 2000通过在HTTP请求中内嵌SQL语句的功能显然是非常强大并且有用的。但是这种见也隐藏着极大的隐患,一旦某个最终用户了解了直接使用浏览器查询数据库的方法,那么数据库中的数据就很危险了,因为最终用户可能会尝试执行他自己的insert,update甚至是delete过程。  为了维护大部分数据库中数据交易的安全,使用户不能够直接使用URL进行查询,SQL Server 2000介绍了XML模板的概念,可以设置SQL Server虚拟目录把这些URL查询导向那些含有所需的SQL过程的XML模板中。  在我们讨论模板概念之前,让我们重新回到SQL Server的IIS虚拟目录管理器中,进入“设置”选项卡。为了防止用户使用HTTP访问,我们必须把“允许 URL 查询”选项给去掉。所有SQL查询现在都会被导向XML模板,XPath中。  为了允许XML模板执行SQL查询,进入“虚拟名称”选项卡,并单击新建按钮,新建一个模板文件夹,取名为templates,在下拉菜单中选择template。然后,要么输入一个你的 XML模板将储存的路径或者单击“浏览”按钮。本例中使用C:/Inetpub/wwwroot/xml/templates。一旦你已经提供了所有的必要的信息,请单击“保存”按钮。  现在一个虚拟目录已经被映射到一个指定来保存 XML查询模板的文件夹,让我们创建一个有效的 XML模板,用来执行 SQL查询。下面的代码是一个模板示例。  file2.xml<Northwind xmlns:sql="urn:schemas-microsoft-com:xml-sql"><sql:query>SELECT Customers.CustomerID, Customers.ContactName, Orders.OrderID, Orders.CustomerIDFROM CustomersINNER JOIN OrdersON Customers.CustomerID = Orders.CustomerIDFOR 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,当然你也可以根据你的需要改变相应的服务器名和虚拟目录名。  让我们把这个 URL拆分成单独的片段,进行分析,你可以看见,我们先使用了 northwind虚拟根,然后使用templates虚拟目录名,如前我们说过,该虚拟目录名已经映射到templates的物理目录中。最后, URL给出了模板文件的名称。执行这个模板,浏览器就会把表中customers元素下嵌套的不同的订单以XML文档的形式显示出来。  使用模板而不使用 URL查询有许多优点。首先,现在一个最终用户就没有改变SQL语句的权力了,去除“通过URL查询访问 SQL Server服务器”的选项 ,就只有SQL Server XML ISAPI可以用来处理模板文件,这就避免未经授权的 插入、更新和删除程序被执行。其次, XML模板支持动态加入参数,这就允许你不用更改模板文件就可以更改一个 SQL WHERE子句的值。  使用参数,就像插入一个 XML header元素一样简单的,在 header元素中,定义了一个 param元素,使用一个值为CustomerID的名称属性。这个参数被赋予一个默认值"A",你可以象在一个存储过程中一样在模板文件中使用这个参数,只要在这个参数前添加一个@,然后把它放入SQL语句或用来调用一个存储过程就可以了。请见下面的代码。<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.CustomerIDFROM CustomersINNER JOIN OrdersON Customers.CustomerID = Orders.CustomerIDWHERE Customers.CustomerID LIKE @CustomerID '%'FOR XML AUTO</sql:query></Northwind>  在本例中,CustomerID参数被一个WHERE子句使用。如果把参数设为"B",SQL 语句就会从Customers和Orders表中返回所有的CustomerID以B开头的行。调用模板并传递正确的CustomerID参数值,只要在查询字符串之后加上参数名和参数值,如:http://localhost/northwind/templates/file2.xml?CustomerID=B即可,就这么简单。
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 圆头水彩笔 圆头充电器 圆头耳机 圆头适合什么发型男 圆头粗跟女单鞋 圆头腮红刷 圆头锁 圆头笔 娃娃鞋圆头 女士圆头单鞋 圆头锁怎么拆 男生发型霸气圆头 圆子 大圆子作品 邪崇by大圆子 邪祟by大圆子 大圆子 酒酿圆子的做法 糯米圆子 小圆子怎么做好吃 小圆子 赤豆小圆子 红豆小圆子 圆子汤 圆寂 鲁智深圆寂 圆寂 喜了 圆寂是什么意思 弘一法师圆寂时留下8个字 高僧圆寂前惊人预言 纯印老人圆寂后图片 圆寂打一成语是什么 梦参老和尚圆寂前预兆 索甲仁波切圆寂 弘一法师圆寂前给妻子的信 圆寸 圆寸发型 美式圆寸 圆寸头 男生圆寸 圆寸图片