Wrox Programmer Forums
|
BOOK: Professional ASP.NET 2.0 and Special Edition; ISBN: 978-0-7645-7610-2; ISBN: 978-0-470-04178-9
This is the forum to discuss the Wrox book Professional ASP.NET 2.0 Special Edition by Bill Evjen, Scott Hanselman, Devin Rader, Farhan Muhammad, Srinivasa Sivakumar; ISBN: 9780470041789
Welcome to the p2p.wrox.com Forums.

You are currently viewing the BOOK: Professional ASP.NET 2.0 and Special Edition; ISBN: 978-0-7645-7610-2; ISBN: 978-0-470-04178-9 section of the Wrox Programmer to Programmer discussions. This is a community of software programmers and website developers including Wrox book authors and readers. New member registration was closed in 2019. New posts were shut off and the site was archived into this static format as of October 1, 2020. If you require technical support for a Wrox book please contact http://hub.wiley.com
 
Old April 29th, 2007, 10:41 PM
Authorized User
 
Join Date: Sep 2006
Posts: 41
Thanks: 0
Thanked 0 Times in 0 Posts
Default Listing12-12




Listing 12-12
Professional Asp.Net2.0 Page 448


Hi to everyone!
You will probably receive this little error that says:
Index was outside the bounds of the array.
well, I started thinking, what may cause a problem?
and has found this:
From the programming prospective usually
array starts from the [0] index and increases him self.
in this particular example we creating an Waithandle Object of the System.Threading namespace
This Waithandle object creates an Array of the 2 waithandles
WHandles[0] = CustWHandle;
WHandles[1] = OrdersWHandle;
basically
The return value from the WaitAny method is
the array index of the Wait Handle that just finsihed running.
So there's only two options available,
either Customers reader finishes first, or the other one, the Orders reader.
So basically we have a well builded
WaitHandle Array, that can contain two different values WaitHandle[1];
first value equals to 0
Second value equals to 1


//From the code of Listing 12-12
int WHIndex;
        System.Threading.WaitHandle[] WHandles =
           new System.Threading.WaitHandle[1];
        System.Threading.WaitHandle OrdersWHandle;
        System.Threading.WaitHandle CustWHandle;

However I still get this error:
Index was outside the bounds of the array
So i decided to enhance my WaitHandle Array to number 2.
  new System.Threading.WaitHandle[2];
 only then everything started working.

//----------------------------------------------------------------
Listing12-12
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<%@ Import Namespace="System.Configuration" %>

<script runat="server">
    protected void Page_Load(object sender, EventArgs e)
    {
        SqlConnection DBCon;
        SqlCommand OrdersCommand = new SqlCommand();
        SqlCommand CustCommand = new SqlCommand();
        SqlDataReader OrdersReader;
        SqlDataReader CustReader;
        IAsyncResult OrdersASyncResult;
        IAsyncResult CustAsyncResult;

        int WHIndex;
        System.Threading.WaitHandle[] WHandles =
        new System.Threading.WaitHandle[2];
        System.Threading.WaitHandle OrdersWHandle;
        System.Threading.WaitHandle CustWHandle;

        DBCon = new SqlConnection();
        DBCon.ConnectionString =
          ConfigurationManager.ConnectionStrings["DSN_NorthWind"].ConnectionString;

        CustCommand.CommandText =
           " SELECT * FROM Customers WHERE CompanyName = 'Alfreds Futterkiste' ";

        CustCommand.CommandType = CommandType.Text;
        CustCommand.Connection = DBCon;

        OrdersCommand.CommandText =
                " SELECT Customers.CompanyName, Customers.ContactName, " +
                " Orders.OrderID, Orders.OrderDate, " +
                " Orders.RequiredDate, Orders.ShippedDate " +
                " FROM Orders, Customers " +
                " WHERE Orders.CustomerID = Customers.CustomerID " +
                " AND Customers.CompanyName = 'Alfreds Futterkiste' " +
                " ORDER BY Customers.CompanyName, Customers.ContactName ";

        OrdersCommand.CommandType = CommandType.Text;
        OrdersCommand.Connection = DBCon;

        // Opening the database connection
        DBCon.Open();

        // Retrieving customer information asynchronously
        CustAsyncResult = CustCommand.BeginExecuteReader();

        // Retrieving orders list asynchronously
        OrdersASyncResult = OrdersCommand.BeginExecuteReader();

        CustWHandle = CustAsyncResult.AsyncWaitHandle;
        OrdersWHandle = OrdersASyncResult.AsyncWaitHandle;

        // Filling Wait Handles array with the two wait handles we
        // are going to use in this code
        WHandles[0] = CustWHandle;
        WHandles[1] = OrdersWHandle;

        // Looping 2 times because there are 2 wait handles
        // in the array
        for (int Index = 0; Index < 2; Index++ )
        {
            // We are only waiting for any of the two
            // asynchronous process to finish running
            WHIndex = System.Threading.WaitHandle.WaitAny(WHandles);

            // The return value from the WaitAny method is
            // the array index of the Wait Handle that just
            // finsihed running
            switch (WHIndex)
            {
                case 0:
                    CustReader = CustCommand.EndExecuteReader(CustAsyncResult);

                    gvCustomers.DataSource = CustReader;
                    gvCustomers.DataBind();
                    break;
                case 1:
                    OrdersReader =
                       OrdersCommand.EndExecuteReader(OrdersASyncResult);

                    gvOrders.DataSource = OrdersReader;
                    gvOrders.DataBind();
                    break;
            }
        }
        // Closing connection
        DBCon.Close();
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>The Wait Any Approach</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:GridView ID="gvCustomers" Width="100%" Runat="server"></asp:GridView>
    <br /><br />
    <asp:GridView ID="gvOrders" Width="100%" AutoGenerateColumns="False"
        Runat="server">
        <Columns>
        <asp:BoundField HeaderText="Company Name"
            DataField="CompanyName"></asp:BoundField>
        <asp:BoundField HeaderText="Contact Name"
            DataField="ContactName"></asp:BoundField>
        <asp:BoundField HeaderText="Order Date" DataField="orderdate"
            DataFormatString="{0:d}"></asp:BoundField>
        <asp:BoundField HeaderText="Required Date" DataField="requireddate"
            DataFormatString="{0:d}"></asp:BoundField>
        <asp:BoundField HeaderText="Shipped Date" DataField="shippeddate"
            DataFormatString="{0:d}"></asp:BoundField>
        </Columns>
    </asp:GridView>
    </div>
    </form>
</body>
</html>









Similar Threads
Thread Thread Starter Forum Replies Last Post
want to convert date from 01/12/07 to 12-Jan-2007 hurperl Perl 1 April 12th, 2007 05:47 AM
Chapter 12 stingo BOOK: Beginning Access 2003 VBA 0 March 1st, 2007 05:15 PM
Errors on Chapter 12 example(12.8) sonnie ASP.NET 2.0 Professional 2 June 7th, 2006 10:55 AM
example in chapter 12 peterml JSP Basics 0 August 23rd, 2003 08:11 AM





Powered by vBulletin®
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Copyright (c) 2020 John Wiley & Sons, Inc.