| [ Team LiB ] |
|
5.3 Stored Procedures with the DataReaderUsing a command to execute a stored procedure query isn't much different from using one to execute a stored procedure that wraps a nonquery command such as INSERT, UPDATE, or DELETE. The Northwind database includes a small set of stored procedure queries. One example is the CustOrderHist procedure, which returns the total number of products a given customer has ordered, grouped by product name. Here's the SQL code to create the CustOrderHist stored procedure. It defines one parameter (shown in the first line), called @CustomerID: CREATE PROCEDURE CustOrderHist @CustomerID nchar(5)
AS
SELECT ProductName, Total=SUM(Quantity)
FROM Products P, [Order Details] OD, Orders O, Customers C
WHERE C.CustomerID = @CustomerID AND
C.CustomerID = O.CustomerID AND
O.OrderID = OD.OrderID AND OD.ProductID = P.ProductID
GROUP BY ProductName
GO
Example 5-5 executes this stored procedure for the customer "ALFKI" and displays the results in a console window. Example 5-5. Using a stored procedure query// TotalOrders.cs - Runs the CustOrderHist stored procedure.
using System;
using System.Data;
using System.Data.SqlClient;
public class TotalOrders
{
public static void Main()
{
string connectionString = "Data Source=localhost;" +
"Initial Catalog=Northwind;Integrated Security=SSPI";
string procedure = "CustOrderHist";
// Create ADO.NET objects.
SqlConnection con = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand(procedure, con);
SqlDataReader r;
// Configure command and add parameters.
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter param;
param = cmd.Parameters.Add("@CustomerID", SqlDbType.NChar, 5);
param.Value = "ALFKI";
// Execute the command.
con.Open();
r = cmd.ExecuteReader();
while (r.Read())
{
Console.WriteLine(r["Total"].ToString() + " of " +
r["ProductName"].ToString());
}
con.Close();
}
}
Here's the sample output for this code: 20 of Vegie-spread 15 of Raclette Courdavault 17 of Rössle Sauerkraut 15 of Lakkalikööri 16 of Grandma's Boysenberry Spread 20 of Flotemysost 2 of Original Frankfurter grüne Soße 2 of Spegesild 21 of Chartreuse verte 6 of Aniseed Syrup 40 of Escargots de Bourgogne |
| [ Team LiB ] |
|