在本示例中,将创建返回数据(在本示例中为 Northwind 数据库中客户列表)的 XML Web 服务,然后接收一个包含数据更新的 DataSet,XML Web 服务会将更新解析回原始数据源。
XML Web 服务将公开两个方法:GetCustomers(返回客户列表)和 UpdateCustomers(将更新解析回数据源)。XML Web 服务存储在 Web 服务器上名为 DataSetSample.asmx 的文件中。以下代码概括了 DataSetSample.asmx 的内容。
<% @ WebService Language = "vb" Class = "Sample" %>
Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports System.Web.Services
<WebService(Namespace:="http://microsoft.com/webservices/")> _
Public Class Sample
Public connection As SqlConnection = New SqlConnection("Data Source=(local);Integrated Security=SSPI;Initial Catalog=Northwind")
<WebMethod( Description := "Returns Northwind Customers", EnableSession := False )> _
Public Function GetCustomers() As DataSet
Dim adapter As SqlDataAdapter = New SqlDataAdapter( _
"SELECT CustomerID, CompanyName FROM Customers", connection)
Dim custDS As DataSet = New DataSet()
adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey
adapter.Fill(custDS, "Customers")
Return custDS
End Function
<WebMethod( Description := "Updates Northwind Customers", EnableSession := False )> _
Public Function UpdateCustomers(custDS As DataSet) As DataSet
Dim adapter As SqlDataAdapter = New SqlDataAdapter()
adapter.InsertCommand = New SqlCommand( _
"INSERT INTO Customers (CustomerID, CompanyName) " & _
"Values(@CustomerID, @CompanyName)", connection)
adapter.InsertCommand.Parameters.Add( _
"@CustomerID", SqlDbType.NChar, 5, "CustomerID")
adapter.InsertCommand.Parameters.Add( _
"@CompanyName", SqlDbType.NChar, 15, "CompanyName")
adapter.UpdateCommand = New SqlCommand( _
"UPDATE Customers Set CustomerID = @CustomerID, " & _
"CompanyName = @CompanyName WHERE CustomerID = " & _
@OldCustomerID", connection)
adapter.UpdateCommand.Parameters.Add( _
"@CustomerID", SqlDbType.NChar, 5, "CustomerID")
adapter.UpdateCommand.Parameters.Add( _
"@CompanyName", SqlDbType.NChar, 15, "CompanyName")
Dim parameter As SqlParameter = _
adapter.UpdateCommand.Parameters.Add( _
"@OldCustomerID", SqlDbType.NChar, 5, "CustomerID")
parameter.SourceVersion = DataRowVersion.Original
adapter.DeleteCommand = New SqlCommand( _
"DELETE FROM Customers WHERE CustomerID = @CustomerID", _
connection)
parameter = adapter.DeleteCommand.Parameters.Add( _
"@CustomerID", SqlDbType.NChar, 5, "CustomerID")
parameter.SourceVersion = DataRowVersion.Original
adapter.Update(custDS, "Customers")
Return custDS
End Function
End Class
<% @ WebService Language = "C#" Class = "Sample" %>
using System;
using System.Data;
using System.Data.SqlClient;
using System.Web.Services;
[WebService(Namespace="http://microsoft.com/webservices/")]
public class Sample
{
public SqlConnection connection = new SqlConnection("Data Source=(local);Integrated Security=SSPI;Initial Catalog=Northwind");
[WebMethod( Description = "Returns Northwind Customers", EnableSession = false )]
public DataSet GetCustomers()
{
SqlDataAdapter adapter = new SqlDataAdapter(
"SELECT CustomerID, CompanyName FROM Customers", connection);
DataSet custDS = new DataSet();
adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;
adapter.Fill(custDS, "Customers");
return custDS;
}
[WebMethod( Description = "Updates Northwind Customers",
EnableSession = false )]
public DataSet UpdateCustomers(DataSet custDS)
{
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.InsertCommand = new SqlCommand(
"INSERT INTO Customers (CustomerID, CompanyName) " +
"Values(@CustomerID, @CompanyName)", connection);
adapter.InsertCommand.Parameters.Add(
"@CustomerID", SqlDbType.NChar, 5, "CustomerID");
adapter.InsertCommand.Parameters.Add(
"@CompanyName", SqlDbType.NChar, 15, "CompanyName");
adapter.UpdateCommand = new SqlCommand(
"UPDATE Customers Set CustomerID = @CustomerID, " +
"CompanyName = @CompanyName WHERE CustomerID = " +
"@OldCustomerID", connection);
adapter.UpdateCommand.Parameters.Add(
"@CustomerID", SqlDbType.NChar, 5, "CustomerID");
adapter.UpdateCommand.Parameters.Add(
"@CompanyName", SqlDbType.NChar, 15, "CompanyName");
SqlParameter parameter = adapter.UpdateCommand.Parameters.Add(
"@OldCustomerID", SqlDbType.NChar, 5, "CustomerID");
parameter.SourceVersion = DataRowVersion.Original;
adapter.DeleteCommand = new SqlCommand(
"DELETE FROM Customers WHERE CustomerID = @CustomerID",
connection);
parameter = adapter.DeleteCommand.Parameters.Add(
"@CustomerID", SqlDbType.NChar, 5, "CustomerID");
parameter.SourceVersion = DataRowVersion.Original;
adapter.Update(custDS, "Customers");
return custDS;
}
}