新客网WWW.XKER.COM:致力做中国最专业的网络学院!
学院: 操作系统 - 网络应用 - 服务器 - 网络安全 - 工具软件 - 办公软件 - Web开发 - 数据库 - 网页设计 - 图形图像 - 媒体动画 - 硬件学堂 - 存储频道 - QQ专区
您的位置:首页 > 软件开发 > .Net开发 > Asp.net教程 > 正文:XML Web Service 数据交换

XML Web Service 数据交换

新客网 XKER.COM 2005-07-21 来源: 收藏本文
XML Web Service 数据交换

客户端调用服务器端的 Web 服务并传递包含数据的 DataSet (ds):

Private Sub Synchronize()
    Dim username As String = "JohnS"
    Dim blnSuccess As Boolean
    ' 使用 XML Web Service 进行同步
    Cursor.Current = Cursors.WaitCursor
    Dim wsFeedback As New wsFeedback.feedback
    blnSuccess = wsFeedback.InsertFeedback(ds, username)

    Cursor.Current = Cursors.Default
End Sub

服务器端的 Web 服务接受 DataSet 并将 XML 直接传递到 SQL Server 2000 存储的过程中,该过程使用 SQLXML(英文)和 OPENXML 解析 XML 并将新数据插入适当的表格。

<WebMethod()> _
Public Function InsertFeedback(ByVal ds As DataSet, ByVal username As 
  String) As Boolean
    Dim con As New SqlConnection(connectionstring)
    Dim cmd As New SqlCommand("p_Feedback_i", con)
    cmd.CommandType = CommandType.StoredProcedure

    ' 设置参数
    Dim prmXML As SqlParameter = cmd.Parameters.Add("@XML", 
      SqlDbType.NText)
    prmXML.Direction = ParameterDirection.Input
    prmXML.Value = ds.GetXml

    Dim prmUsername As SqlParameter = cmd.Parameters.Add("@Username", 
      SqlDbType.NVarChar)
    prmUsername.Direction = ParameterDirection.Input
    prmUsername.Value = username

    Try
    con.Open()
        cmd.ExecuteNonQuery()
    Catch ex As Exception
        ' 处理、记录并重掷错误
        Throw ex

    Finally
        con.Close()
    End Try

    Return True

End Function

The stored procedure inserts the new data:

CREATE PROCEDURE p_Feedback_i
   @XML ntext,
   @Username nvarchar(50)

AS

SET NOCOUNT ON

DECLARE @iDoc   integer
DECLARE @Error   integer

/* Create XML document. */
EXEC sp_xml_preparedocument @iDoc OUTPUT, @XML

/* Insert new records */
INSERT INTO    Feedback
      (
      FeedbackID,
      PlantSection,
      Part,
      DefectScope,
      ScopeID,
      DefectType,
      RichInk,
      Username
      )
SELECT     ID,
      PlantSection,
      Part,
      DefectScope,
      ScopeID,
      DefectType,
      RichInk,
      @Username
FROM OPENXML (@iDoc, '/DataSet/Feedback',2) WITH 
      (
      ID   uniqueidentifier,
      PlantSection   int,
      Part      int,
      DefectScope   int,
      ScopeID   nvarchar(50),
      DefectType   int,
      RichInk      nvarchar(50)
      )

SELECT @Error = @@ERROR
IF (@Error <> 0)
BEGIN
   GOTO Errorhandler
END

/* Remove the XML document*/
EXEC sp_xml_removedocument @iDoc

RETURN

Errorhandler:

IF NOT @iDoc IS NULL
   EXEC sp_xml_removedocument @iDoc

RAISERROR (@Error,16,1)

RETURN
收藏】 【评论】 【推荐】 【投稿】 【打印】 【关闭
发表评论
要记得去论坛讨论,点击注册新会员匿名评论
评论内容:不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
阅读排行
随机推荐
实用信息推荐