分享
 
 
 

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

王朝mssql·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

使用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:Inetpubwwwrootxmlemplates。一旦你已经提供了所有的必要的信息,请单击“保存”按钮。

现在一个虚拟目录已经被映射到一个指定来保存 XML查询模板的文件夹,让我们创建一个有效的 XML模板,用来执行 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,当然你也可以根据你的需要改变相应的服务器名和虚拟目录名。

让我们把这个 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.CustomerID

FROM Customers

INNER JOIN Orders

ON Customers.CustomerID = Orders.CustomerID

WHERE 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即可,就这么简单。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有