Snake.Net
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
?
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
- 上一篇: PowerPoint中的LinkForm
- 下一篇: 广州.NET 俱乐部第三次聚会成功举办。