This step-by-step article demonstrates how to create and test a Web service that returns a DataSet object to a client. This article also demonstrates how to reference the Web service in a client application and display the returned DataSet in a DataGrid control.
The code samples in this article use http://localhost as the Web server. The code samples also use the Northwind database, which is included with Microsoft SQL Server as the backend database.
On the File menu, point to New, and then click Project.
In the New Project dialog box, click Visual C# Projects under Project Types, and then click ASP.NET Web Service under Templates.
In the Name text box, type csCustomer. In the Location text box, type the URL to your server. If you are using the local server, type http://localhost. Click OK.
On the View menu, click Code to switch to code view.
Add the following code to the top of the Code window, just after the other using statements:
//Use data access objects from the SqlClient namespace.
using System.Data.SqlClient;
Locate the following code:
public Service1()
{
//CODEGEN: The ASP.NET Web Services Designer requires this call.
InitializeComponent();
}
After this code, add the following code:
[WebMethod]
public string CountWords(string Sentence)
{
string[] Words = Sentence.Split(' ');
return "Your sentence contains " + Words.Length + " word(s).";
}
[WebMethod]
public DataSet GetCustOrders(string IDMask)
{
IDMask = IDMask.Replace("'", "''");
//IDMask is the Customer ID that the client submits.
//Replace single quotation marks with two single quotation marks
//so that all single quotation marks in the CustomerID are parsed correctly.
//Modify this connection string to use your SQL Server and log on information.
SqlConnection con = new SqlConnection("server=<your server>;uid=<your user id>;
pwd=<your Password>;database=northwind");
//Open the Customers table to serve as the parent table.
SqlDataAdapter daCust = new SqlDataAdapter("Select * From Customers
Where CustomerID Like '%" + IDMask + "%'", con);
//Open the Orders table to serve as the child table.
SqlDataAdapter daOrders = new SqlDataAdapter("Select * From Orders
Where CustomerID Like '%" + IDMask + "%'", con);
//Create a client-side DataSet to hold the Customers and Orders tables.
DataSet ds=new DataSet();
//Explicitly open the connection to allow explicit closing.
con.Open();
//Fill the DataSet with the Customers table and the Orders table.
daCust.Fill(ds, "Cust");
daOrders.Fill(ds, "Orders");
//Explicitly close the connection - do not wait for garbage collection.
con.Close();
//Relate Customers to Orders.
ds.Relations.Add("CustOrd", ds.Tables["Cust"].Columns["CustomerID"],
ds.Tables["Orders"].Columns["CustomerID"]);
//The relationship is Orders nested in Customers.
ds.Relations[0].Nested = true;
//Return the DataSet to the client.
return ds;
}
Modify the SqlConnection string as appropriate for your environment.
Press the F5 key to compile and run the Web Service. A Web page is returned that permits you to interact with the Web Service from Microsoft Internet Explorer.
Note that the URL of the returned page is
http://localhost/csCustomer/Service1.asmx.
On the Service1 Web Page, click GetCustOrders. A Web page is returned that displays details about the GetCustOrders Web Method.
Note that the URL of the returned page is http://localhost/csCustomer/Service1.asmx?op=GetCustOrders.
In the Text section of the GetCustOrders page, type AL in the Value text box next to the IDMask parameter.
Click Invoke. A Web page is returned that displays the results of the GetCustOrders Web method as a hierarchical XML document.
Note that the URL of the returned page is
http://localhost/csCustomer/Service1.asmx/GetCustOrders?IDMask=AL.
In Visual Studio .NET, create a new Visual C# .NET Windows Application project. By default, Form1 is added to the project.
Add one TextBox control, one Button control, and one DataGrid control to Form1. TextBox1, Button1, and DataGrid1 are added to the project by default.
On the Project menu, click Add Web Reference. A dialog box appears that displays sources of Web references.
In the Add Web Reference dialog box, type the URL for your Web service (for example, http://localhost/csCustomer/Service1.asmx), press ENTER, and then click Add Reference. Notice that a new entry named Web Reference appears in Solution Explorer.
In the Visual C# project, double-click Button1 to open its Code window, and paste the following code into the Button1_Click event handler:
//Use the Web Service that your Web server provides.
localhost.Service1 MyService = new localhost.Service1();
//Invoke the public WebMethod that returns a DataSet.
//Bind the DataGrid to the returned DataSet.
dataGrid1.DataSource = MyService.GetCustOrders(textBox1.Text);
dataGrid1.DataMember = "Cust";
For more information about Web services, see the "Creating and Accessing Web Services Walkthroughs" topic in the Visual Studio .NET Help documentation.