當(dāng)前位置:工程項(xiàng)目OA系統(tǒng) > 泛普各地 > 上海OA系統(tǒng) > 上海OA信息化
使用SQL Server 2000將現(xiàn)有代碼作為Web服務(wù)提供
申請(qǐng)免費(fèi)試用、咨詢電話:400-8352-114
AMTeam.org使用SQL Server 2000將現(xiàn)有代碼作為Web服務(wù)提供
使用 .NET 建立分布式應(yīng)用程序
Steve Kirk 和 Priya
Dhawan
Microsoft Developer Network
摘要:本文介紹了如何使用 Microsoft SQL Server 2000 的 XML 功能將現(xiàn)有的存儲(chǔ)過(guò)程代碼作為 Web 服務(wù)提供。
簡(jiǎn)介
Microsoft? SQL Server? 2000 的 XML
功能可以簡(jiǎn)化將現(xiàn)有代碼作為 Web 服務(wù)提供的任務(wù)。本文集中討論了傳入和傳出 Transact SQL 代碼的數(shù)據(jù)與 XML 消息(在 Web
服務(wù)客戶機(jī)和服務(wù)器之間使用)之間的轉(zhuǎn)換。
評(píng)估現(xiàn)有代碼是否適合于作為 Web 服務(wù)提供時(shí),本文討論的數(shù)據(jù)轉(zhuǎn)換問(wèn)題并不是唯一需要考慮的問(wèn)題。應(yīng)考慮的其它因素包括狀態(tài)模型、返回的數(shù)據(jù)大小、如何表示已經(jīng)成功、如何返回錯(cuò)誤信息、安全模型(包括訪問(wèn)控制、身份驗(yàn)證和加密)、執(zhí)行模型(同步或異步)、如何分發(fā)代碼,以及事務(wù)模型(COM+ 事務(wù)或聲明事務(wù)),等等。這些問(wèn)題將在即將發(fā)表的體系結(jié)構(gòu)主題(英文)文章中進(jìn)行討論。
SQL Server 2000 中的現(xiàn)有代碼
SQL Server 2000
的 XML 功能簡(jiǎn)化了將現(xiàn)有 Transact SQL 代碼作為 Web 服務(wù)提供的過(guò)程。這依賴于 SQL Server 2000 中的兩項(xiàng) XML
功能:
對(duì) Transact SQL 的擴(kuò)展可將關(guān)系型數(shù)據(jù)轉(zhuǎn)換為 XML,并且可以對(duì)傳入的 XML 進(jìn)行語(yǔ)法分析。
利用
ISAPI 模板功能,可將傳入的 HTTP 請(qǐng)求應(yīng)用于 Transact SQL 代碼,并且可以使用 XSL 樣式表對(duì)傳出的 XML 進(jìn)行轉(zhuǎn)換。只要可以使用
FORXML 子句“選定”數(shù)據(jù),SQL Server 就可以將 XML 返回到 XML 模板。
SQL Server 2000
XML 模板
SQL Server 2000 XML 模板以透明方式執(zhí)行以下任務(wù):
對(duì)傳入的 HTTP 請(qǐng)求進(jìn)行解碼
將參數(shù)應(yīng)用于 Transact SQL 查詢
執(zhí)行查詢
使用 XSL 轉(zhuǎn)換傳出的 XML
讀數(shù)據(jù)
以下示例執(zhí)行 ISAPI 模板中指定的
Transact SQL。如果必要,可將 HTTP 請(qǐng)求傳遞到 Transact SQL 代碼,并由該代碼進(jìn)行語(yǔ)法分析。根據(jù)模板中指定的 .xsl 文件,返回的
XML 將被轉(zhuǎn)換為 SOAP 并返回給 Web 服務(wù)的客戶:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"
sql:xsl="BDAdotNetWebService3Example1.xsl"> <Orders>
<sql:query> Exec GetOrdersXML </sql:query> </Orders>
</ROOT>
以下是模板中引用的 XSL 樣式表,它將存儲(chǔ)過(guò)程中的 XML 轉(zhuǎn)換為 SOAP:
<?xml version="1.0"?>
<xsl:stylesheet
version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:m="Some-URI">
<xsl:template
match="/">
<SOAP-ENV:Envelope>
<SOAP-ENV:Body>
<m:BDAdotNetWebService3Example1Response
>
<xsl:copy-of
select="http://Orders"/>
</m:BDAdotNetWebService3Example1Response>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
</xsl:template>
</xsl:stylesheet>
最后,以下存儲(chǔ)過(guò)程代碼在
Transact SQL SELECT 語(yǔ)句中使用 FOR XML EXPLICIT 子句來(lái)返回 XML?!坝唵巍焙汀坝唵卧敿?xì)信息”從單獨(dú)的表中選擇,然后合并到
XML 層次中:
/* 訂單是父 XML 元素 */
Select 1 as Tag, NULL as
Parent,
Orders.OrderId AS
[Order!1!OrderId],
Orders.OrderStatus AS
[Order!1!OrderStatus],
Orders.OrderDate AS
[Order!1!OrderDate],
Orders.SubTotal AS
[Order!1!SubTotal],
Orders.Tax AS
[Order!1!Tax],
Orders.ShippingHandling AS
[Order!1!ShippingHandling],
Orders.ShipToName AS
[Order!1!ShipToName],
Orders.ShipToAddressId AS
[Order!1!ShipToAddressId],
NULL AS
[OrderDetail!2!OrderDetailId],
NULL AS
[OrderDetail!2!OrderId],
NULL AS
[OrderDetail!2!ItemId],
NULL AS
[OrderDetail!2!UnitPrice],
NULL AS
[OrderDetail!2!Quantity]
from Orders
UNION ALL
/* 訂單詳細(xì)信息是子
XML 元素 */
select 2 as tag, 1 as parent,
Orders.OrderId AS [Order!1!OrderId],
NULL AS
[Order!1!OrderStatus],
NULL AS
[Order!1!OrderDate],
NULL AS
[Order!1!SubTotal],
NULL AS [Order!1!Tax],
NULL AS [Order!1!ShippingHandling],
NULL AS
[Order!1!ShipToName],
NULL AS
[Order!1!ShipToAddressId],
OrderDetails.OrderDetailId AS
[OrderDetail!2!OrderDetailId],
OrderDetails.OrderId AS
[OrderDetail!2!OrderId],
OrderDetails.ItemId AS
[OrderDetail!2!ItemId],
OrderDetails.UnitPrice AS
[OrderDetail!2!UnitPrice],
OrderDetails.Quantity AS
[OrderDetail!2!Quantity]
from Orders, OrderDetails
where
Orders.OrderId = OrderDetails.OrderId
ORDER BY
[Order!1!OrderId],[OrderDetail!2!OrderDetailId]
For XML
EXPLICIT
寫數(shù)據(jù)
以下示例中,通過(guò) HTTP 請(qǐng)求提供表示層次行數(shù)據(jù)的
XML,然后將其傳遞到 ISAPI 模板中指定的 Transact SQL 代碼。在存儲(chǔ)過(guò)程中對(duì) XML
進(jìn)行語(yǔ)法分析,并進(jìn)行相應(yīng)的寫入操作:
Create Procedure InsertOrder
@Order NVARCHAR(4000) =
NULL,
@OrderId int Output
-
DECLARE @hDoc
INT
DECLARE @PKId INT
BEGIN TRANSACTION
/* 將 XML
載入文檔以進(jìn)行分析 */
EXEC
sp_xml_preparedocument @hDoc OUTPUT, @Order
/* 插入訂單標(biāo)頭 */
INSERT
Orders(CustomerId,
OrderDate,
ShipToName,
ShipToAddressId,
OrderStatus)
SELECT *
FROM OPENXML(@hDoc,
'/NewDataSet/Orders')
WITH ( CustomerId int 'CustomerId',
OrderDate Datetime
'OrderDate',
ShipToName nvarchar(40)
'ShipToName',
ShipToAddressId int
'ShipToAddressId',
OrderStatus
int 'OrderStatus')
SELECT
@PKId = @@IDENTITY
/* 插入訂單詳細(xì)信息 */
INSERT OrderDetails
(OrderId,
ItemId,
UnitPrice,
Quantity)
SELECT @PKId as
OrderId, ItemId, UnitPrice,
Quantity
FROM OPENXML(@hDoc, '/NewDataSet/Details')
WITH ( ItemId int
'ItemId',
UnitPrice money
'UnitPrice',
Quantity int 'Quantity')
/* 指定輸出參數(shù)的值 */
Select @OrderId =
@PKId
COMMIT TRANSACTION
/* 清除 XML 文檔 */
EXEC
sp_xml_removedocument @hDoc
總結(jié)
本文以及附帶的示例介紹了有關(guān)數(shù)據(jù)轉(zhuǎn)換的信息。通過(guò)數(shù)據(jù)轉(zhuǎn)換,可以使用 SQL Server
2000 的 XML 功能將現(xiàn)有 Transact SQL 代碼作為 Web 服務(wù)提供。本文集中討論了傳入和傳出 Transact SQL 代碼的數(shù)據(jù)與
SOAP 消息(在 Web 服務(wù)客戶機(jī)和服務(wù)器之間使用)之間的轉(zhuǎn)換。
這些解決方案的性能各異,并且受所傳遞的數(shù)據(jù)大小影響。在本系列后面的文章中,我們將對(duì)這些實(shí)現(xiàn)方法進(jìn)行比較。
評(píng)估現(xiàn)有代碼是否適合作為 Web 服務(wù)時(shí),接口只不過(guò)是應(yīng)當(dāng)考慮的諸多因素之一。應(yīng)考慮的其它因素包括安全性(包括授權(quán)、身份驗(yàn)證和加密)、事務(wù)模型、狀態(tài)模型、返回錯(cuò)誤和結(jié)果的方式,以及代碼是同步還是異步執(zhí)行,等等。
- 1重慶OA信息化
- 2成都OA信息化
- 3貴陽(yáng)OA信息化
- 4西安OA信息化
- 5武漢OA信息化
- 6北京OA信息化
- 7廣州OA信息化
- 8石家莊OA信息化
- 9天津OA信息化
- 10沈陽(yáng)OA信息化
- 11長(zhǎng)春OA信息化
- 12福州OA信息化
- 1知識(shí)分析師和知識(shí)主管的區(qū)別
- 2從管人到集“知”:走進(jìn)上海OA信息化
- 3大辨析連載系列之終結(jié)篇——KM與OA、CM以及EIP/EKP的關(guān)系
- 4正確認(rèn)識(shí)“Web服務(wù)”
- 5交通行業(yè)上海OA信息化應(yīng)用的思考
- 6上海OA信息化與企業(yè)產(chǎn)品創(chuàng)新過(guò)程
- 7上海立信會(huì)計(jì)學(xué)院-辦公自動(dòng)化OA系統(tǒng)
- 8保護(hù)XML Web服務(wù)免受黑客攻擊 [第一部分] [第二部分]
- 9Web服務(wù)到底是什么
- 10企業(yè)上海OA信息化的內(nèi)涵與運(yùn)作
- 11信任度與知識(shí)屬性于知識(shí)分享程度關(guān)聯(lián)性之探討
- 12Providing the Knowledge Management and Value Your Customers,
- 13成為上海OA信息化者的重要性
- 14會(huì)議跟蹤、公告欄應(yīng)用辦公自動(dòng)化軟件OA系統(tǒng)
- 15年終盤點(diǎn):協(xié)同上海OA的2013與2014
- 16先上辦公自動(dòng)化(OA)對(duì)于信息化基礎(chǔ)薄弱的企業(yè)更合適
- 17上海OA市場(chǎng)過(guò)去、未來(lái)
- 18上海OA信息化發(fā)展歷程、代表人物和觀點(diǎn)
- 19場(chǎng)的四個(gè)形式
- 20不使用VS.NET集成開發(fā)環(huán)境,調(diào)用微軟的WebService注冊(cè)服務(wù)
- 21不同學(xué)科領(lǐng)域知識(shí)觀的比較分析
- 22上海OA信息化現(xiàn)在開始
- 23使用Visual Basic或C#創(chuàng)建Web Service
- 24知識(shí)的分類與知識(shí)創(chuàng)新的過(guò)程
- 25上海OA信息化:企業(yè)從優(yōu)秀到卓越
- 26上海OA信息化軟件的分類
- 27企業(yè)上海OA信息化創(chuàng)新探析
- 28不同業(yè)務(wù)模式下的上海OA信息化策略
- 29上海環(huán)境集團(tuán)辦公OA信息系統(tǒng)
- 30如何建立呼叫中心知識(shí)庫(kù)的詞匯表
成都公司:成都市成華區(qū)建設(shè)南路160號(hào)1層9號(hào)
重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務(wù)大廈18樓
版權(quán)所有:泛普軟件 渝ICP備14008431號(hào)-2 渝公網(wǎng)安備50011202501700號(hào) 咨詢電話:400-8352-114