加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

[翻译]通过WebService调用SQLXML(SQL Server 2005)

发布时间:2020-12-17 02:52:37 所属栏目:安全 来源:网络整理
导读:原文地址: http://www.codeproject.com/KB/webservices/SQLToXMLWebService.aspx [翻译]通过WebService调用SQLXML(SQL Server 2005) 原文发布日期:2007.02.04 作者: Russ Quinn 翻译: webabcd 介绍 我最近需要给用户创建一个feed,所有的数据都是放在sql
原文地址: http://www.codeproject.com/KB/webservices/SQLToXMLWebService.aspx


[翻译]通过WebService调用SQLXML(SQL Server 2005)


原文发布日期:2007.02.04
作者: Russ Quinn
翻译: webabcd


介绍
我最近需要给用户创建一个feed,所有的数据都是放在sqlserver数据库里的,所以我疯狂的查找把sqlserver里的数据转换成xml的最快速的方法。现在我知道了xml已经成为了sqlserver2005的一部分。

之后我萌生出了一个主意,就是创建一个webservice用于数据库转xml的服务,这样用户就可以在任何时候调用他们需要的数据(如果需要也可以传参数)

现在,我知道你将会说“这不是什么新东西也没有什么难度”,但这正是我写本文的目的,看完本文之后你会发现原来实现这个功能是如此简单。我不敢相信在CodeProject居然没有一个人提出这样的解决方法。


代码
首先,在你的sqlserver2005数据库(要有相关的数据)中创建如下存储过程

CREATE ? PROCEDURE ? [ dbo ] . [ GetStories ]

????
@fromDate ? datetime ,

????
@toDate ? datetime

AS ?

????
BEGIN

?

????????
select ??dbo.Story.id,

????????????????description,

????????????????notes,

????????????????
text ,

????????????????publicationdate,

????????????????authorsnames,

????????????????keywords

????????
from ????dbo.Story

????????????????
inner ? join ?dbo.Status? on ?dbo.Story.StatusId? = ?dbo.Status.id

????????
where ???publicationdate? between ? @fromDate ? and ? @toDate

????????????????
and ?dbo.Status.status? = ? ' live '

????????
order ? by ?publicationDate

????????
FOR ?????XML?PATH( ' story ' ),

????????????????????ROOT(
' stories ' )

????
END

其关键的步骤就是“FOR XML PATH(###),ROOT(###)”这部分。他告诉sqlserver返回的xml每一行都要有名为“story”的节点,并且xml文档的根节点名为“stories”

下一步新建一个webservice,增加一个新的WebMethod。在这个方法中连接数据库并获得数据。

现在,调用SqlCommand类的ExecuteXmlReader方法以返回xml,类似如下代码

XmlReader?reader? = ?command.Command.ExecuteXmlReader();

这个reader就是一个XmlDataDocument流,它可以从WebMethod返回。下面是我写的一段WebMethod,我用了一个数据库帮助类App_Data.SqlSPCommand来获取数据库中的值。

[WebMethod(Description? = ? " Get?stories?based?on?a?centre,?and?a?from?and?to?date " ,

CacheDuration?
= ? 600 ,?MessageName? = ? " GetStoriesForCentre " )]

public ?XmlDataDocument?GetStoriesForCentre( string ?centre,?DateTime?fromDate,?DateTime?toDate)

{

?Database?db?
=?new?Database("TarkStoriesConnectionString");

?

?
using?(db.Connection)

?
{

??db.OpenConnection();

?

??App_Data.SqlSPCommand?command?
=?new?App_Data.SqlSPCommand("GetStoriesForCentre",?db.Connection);

??command.AddParameter(
"@centre",?SqlDbType.VarChar,?centre);

??command.AddParameter(
"@fromDate",?SqlDbType.DateTime,?fromDate);

??command.AddParameter(
"@toDate",?toDate);


??XmlReader?reader?
=?command.Command.ExecuteXmlReader();

?

??XmlDataDocument?xml?
=?new?XmlDataDocument();

??xml.Load(reader);


??
return?xml;

?}

}


就这些东西了

调用webservice就按我们通常做的方法就行,提供一些参数(本例中是两个日期类型)就可以返回xml,本例中返回的xml如下

<? xml?version="1.0"?encoding="utf-8"? ?>

< stories >

????
< story >

????????
< id > 514 </ id >

????????
< description > some?description </ description > ?

????????
< notes > no?notes?available </ notes > ?

????????
< text > blah?blah?blah </ text > ?

????????
< publicationdate > 2007-01-30T00:00:00 </ publicationdate > ?

????????
< authorsnames > Sue?Williams </ authorsnames >

????????
< keywords > boring?story </ keywords >

????
</ story >

</ stories >

就是如此简单,希望本文能对你有一些帮助


译者注:关于SQLXML的更多内容可以参看 http://www.stylusstudio.com/sqlxml_tutorial.html 译者注:感谢本页第三位留言的兄弟,他指出了本文的一个失误,“存储过程是2个参数,而code包括了3个参数”,但是文中的方法是没问题的,我已测试通过。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读