Monday, October 22, 2012

How Indexes Are Used by the Query Optimizer



Well-designed indexes can reduce disk I/O operations and consume fewer system resources therefore improving query performance. Indexes can be helpful for a variety of queries that contain SELECT, UPDATE, DELETE, or MERGE statements. Consider the querySELECT Title, HireDate FROM HumanResources.Employee WHERE EmployeeID = 250 in the AdventureWorks2012 database. When this query is executed, the query optimizer evaluates each available method for retrieving the data and selects the most efficient method. The method may be a table scan, or may be scanning one or more indexes if they exist.
When performing a table scan, the query optimizer reads all the rows in the table, and extracts the rows that meet the criteria of the query. A table scan generates many disk I/O operations and can be resource intensive. However, a table scan could be the most efficient method if, for example, the result set of the query is a high percentage of rows from the table.
When the query optimizer uses an index, it searches the index key columns, finds the storage location of the rows needed by the query and extracts the matching rows from that location. Generally, searching the index is much faster than searching the table because unlike a table, an index frequently contains very few columns per row and the rows are in sorted order.


Saturday, October 20, 2012

how to get subfolder names


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
         
            string path = @"D:\Vesro\";
           // string paths=@"D:\Vesro\", "*", System.IO.SearchOption.AllDirectories);
            foreach (string s in Directory.GetDirectories(@"D:\Vesro\", "*", System.IO.SearchOption.AllDirectories))
            {
                Console.WriteLine(s.Remove(0, path.Length));
             
            }
            Console.ReadLine();
        }
    }
}

Thursday, October 18, 2012

How to debug client-side script in Visual С# .NET or in Visual C# 2005

This step-by-step article describes how to debug client-side script in a Microsoft ASP.NET application by using Visual С# .NET or Visual C# 2005 and the Microsoft Script Debugger.

Visual С# provides a number of new debugging features that enable you to more easily identify and diagnose problems in your code.

Requirements

The following list outlines the recommended hardware, software, network infrastructure, and service packs that are required:
  • Microsoft Visual Studio .NET or Microsoft Visual Studio 2005
  • Microsoft Internet Information Services (IIS) 5.0 or later
  • Microsoft Script Debugger
This article assumes that you are familiar with the following topics:
  • Web applications
  • ASP.NET
  • Visual C#

Debugging Client-Side Script in Visual C# .NET or in Visual C# 2005

In earlier versions of Microsoft Active Server Pages (ASP), applications can be hard to debug, particularly if the bugs occur in client-side script code. With Visual Studio .NET or Visual Studio 2005, you have greater control when you debug client-side script by using the integrated debugger and the Locals window.

Create the Application

In this section, you create an ASP.NET Web application that displays three HTML TextBox controls together with a Buttoncontrol that calculates the input. This sample uses JavaScript to program the Button control.
  1. To use the debugger with client-side JavaScript, you must first enable script debugging for the browser. To do this, follow these steps:
    1. Open Microsoft Internet Explorer.
    2. On the Tools menu, click Internet Options.
    3. On the Advanced tab, locate the Browsing section, clear the Disable script debugging check box, and then click OK.

      Note In Microsoft Windows Server 2003, click to clear the Disable script debugging (Internet Explorer) check box.
    4. Close Internet Explorer.
  2. To create a new ASP.NET Web application in Visual C# .NET or in Visual C# 2005, follow these steps:
    1. Open Visual Studio .NET or Visual Studio 2005.
    2. On the File menu, point to New, and then click Project.

      Note In Visual Studio 2005, point to New on the File menu, and then click Web Site.
    3. In the New Project dialog box, click Visual С# Projects under Project Types, and then click ASP.NET Web Application under Templates.

      Note In Visual Studio 2005, click ASP.NET Web Site under Templates, and then select Visual C# on the right ofLanguage.
    4. In the Name text box, type ScriptDebuggingExample.

      Note In Visual Studio 2005, click OK.
  3. Switch to the HTML view of the WebForm1.aspx file.
  4. Copy and paste the following code inside the
    tags:

    Important Paste the code segments as HTML: right-click where you will insert the code, and then click Paste as HTML.
    First Number:
    Second Number:
    Result:
    This code creates the two input text boxes, a calculation button, and a third text box that displays the results.
  5. Copy and paste the following code into your page; make sure that you position the code block before the first tag:
    
    
    This code programs the button so that the following functions occur when you click the button:
    • Retrieve input values.
    • Calculate input.
    • Display result.
  6. Click Save.
  7. To test the project, follow these steps:
    1. On the Debug menu, click Start to build and to run the application. WebForm1 opens in the browser and displays two input text boxes, a result text box, and a button.
    2. In the First Number text box, type 16.
    3. In the Second Number text box, type 2.
    4. Click Divide. Notice that Result text box does not display 8 as you might expect.
    5. Close Internet Explorer.

Debug the Application

The Microsoft Script Debugger is useful for debugging client-side script in your ASP.NET application. You can use the "debugger" keyword to invoke the Microsoft Script Debugger programmatically in the script code.
  1. Add the following code as the first code in the btnDivide_Clicked procedure:
    debugger
    This keyword indicates where Script Debugger stops execution and starts the debugger. You can use this keyword to trace the values of variables throughout the remainder of the routine.
  2. Click Save.
  3. To run the project, follow these steps:
    1. On the Debug menu, click Start to build and to run the application.
    2. When the page opens in the browser, type 16 in the First Number text box.
    3. In the Second Number text box, type 2.
    4. Click Divide. Notice that execution stops at the debugger keyword, and that control is transferred to the Visual Studio .NET IDE.
    5. Close Internet Explorer.
  4. Right-click the following line of code:
    intResult = intNumber1/intNumber2;
    and then click Insert Breakpoint.
  5. On the Debug menu, click Continue.
  6. On the Debug menu, point to Windows, and then click Locals. Notice that this sets the value of intNumber1 to 16 as expected. However, notice that this also sets the value of intNumber2 to 16 and that this does not correspond to the value that you typed. The intNumber2 variable is assigned the same value as intNumber1.
  7. On the Debug menu, click Stop Debugging to close the debugger and browser windows. Control is returned to the IDE.

Modify the Code

  1. Replace the code
    intNumber2 = document.all('txtNumber1').value;

    with the following code to assign the correct value to the intNumber2 variable:
    intNumber2 = document.all('txtNumber2').value;
  2. Click Save.
  3. To test the project again, follow these steps:
    1. On the Debug menu, click Start to build and to run the application.
    2. When the page opens in the browser, type 16 in the First Number text box.
    3. In the Second Number text box, type 2.
    4. Click Divide. Notice that execution stops at the beginning of the btnDivide_Clicked routine.
    5. Make sure that the Locals window is still open. On the Debug menu, click Step Into to step through the code line by line until you reach the return statement. Notice that the intNumber1 and the intNumber2 variables display the correct values.
    6. On the Debug menu, click Continue. Control is returned to the browser, and the Result text box displays the correct result.
    7. Close Internet Explorer.

Complete Code Listings

Create the Application

<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="ScriptDebuggingExample.WebForm1" %>
 


  
    WebForm1
    
    
    
    
  
  

  
 
    
First Number:
Second Number:
Result:

Debug the Application

<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="ScriptDebuggingExample.WebForm1" %>
 


  
    WebForm1
    
    
    
    
  
  

  
 
    
First Number:
Second Number:
Result:

Modify the Code

<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="ScriptDebuggingExample.WebForm1" %>
 


  
    WebForm1
    
    
    
    
  
  

  
 
    
First Number:
Second Number:
Result:
-------------------------------------------------------------------------------
Source url : http://support.microsoft.com/kb/816173

Monday, October 15, 2012

how to add multiple rows from datatable to database in c#


using System;
using System.Collections.Generic;
using
 System.ComponentModel;
using
 System.Data;
using
 System.Drawing;
using
 System.Linq;
using
 System.Text;
using
 System.Windows.Forms;
using
 System.Data.SqlClient;
 

namespace
 WindowsFormsApplication1
{
    public partial class Form1 : Form    {
        public Form1()
        {
            InitializeComponent();            
        }
        DataTable dt = new DataTable();
        private void Form1_Load(object sender, EventArgs e)
        {
            DataColumn dcname = new DataColumn("NAME");
            DataColumn dccity = new DataColumn("CITY");
            dt.Columns.Add(dcname);
            dt.Columns.Add(dccity);
            dataGridView1.DataSource = dt;
        } 
        private void btnAddToGridview_Click(object sender, EventArgs e)
        {
            DataRow dr = dt.NewRow();
            dr[0] = txtname.Text;
            dr[1] = txtcity.Text;
            dt.Rows.Add(dr);
            dataGridView1.DataSource = dt;
        }
        SqlConnection conn;
        SqlCommand comm;
        string constring = @"Data Source=server_name;Initial Catalog=DATABASE_NAME;Integrated Security=True";
        private void btnSaveToDatabase_Click(object sender, EventArgs e)
        {
            conn = new SqlConnection(constring);
            conn.Open();
            for(int a=0;a            {
                comm = new SqlCommand("insert into TABLE_NAME values ('" + dataGridView1.Rows[a].Cells[0].Value + "','" + dataGridView1.Rows[a]
                                        .Cells[1].Value + "')", conn);
                comm.ExecuteNonQuery();
            }
            conn.Close();
            MessageBox.Show("Saved");
        }               
    }
}

Friday, October 12, 2012

Difference between Linq and Store Procedure


There are couple of advantage of LINQ over stored procedures. 
1. Debugging - It is really very hard to debug the Stored procedure but as LINQ is part of .NET, you can use visual studio's debugger to debug the queries. 
2. Deployment - With stored procedures, we need to provide an additional script for stored procedures but with LINQ everything gets complied into single DLL hence deployment becomes easy. 
3. Type Safety - LINQ is type safe, so queries errors are type checked at compile time. It is reallygood to encounter an error when compiling rather than runtime exception!

Thursday, October 11, 2012

Reverse of a string by words C# example


string-reversal-example


Reverse of a string in C#, VB .Net, or C++ is pretty easy. Please not that we are talking about a word by word reversal, like


Hello How Are You
Becomes
You Are How Hello


Reversing characters inside a word is a different story.
Some people find it difficult, so I'm putting the C# example code here.


class Program
    {
        public static string reverseIt(string strSource)
        {
            string[] arySource = strSource.Split(new char[] { ' ' });
            string strReverse = string.Empty;
            for (int i = arySource.Length - 1; i >= 0; i--)
            {
                    strReverse = strReverse + " "  + arySource[i];
            }
            Console.WriteLine("Original: " + strSource);
            Console.WriteLine("Reverse: " + strReverse);


            return strReverse;
        }


        static void Main(string[] args)
        {
            reverseIt("Hello World! Let's Reverse The String");
        }
    }




The algorithm is very simple and it's made easy with constructs provided by .Net framework.
Assumption:
We assume that two words inside a given string will be separated by one white space.
First of all we call Split method on the string which user provided us, we pass in an array of characters which contains only one space, although we can put other characters like tab '\t' as separator in here. The method call 
string[] arySource = strSource.Split(new char[] { ' ' });


When separated, the array arySource will look like as given below

Array IndexWord
0Hello
1World
2Let's
3Reverse
4The
5String

Reversing a string using C# for loop

Reversing a string using C# for loop
using System;

namespace ProgramCall
{
    class StringReverse
    {
        static void Main()
        {

            string Str, Revstr = "";
            Console.Write("Enter A String : ");
            Str = Console.ReadLine();

            for (int i = Str.Length - 1; i >= 0; i--)
            {

                Revstr = Revstr + Str[i];
            }

            Console.WriteLine("Reverse  String  Is  {0}", Revstr);
            Console.ReadLine();
        }
    }
}

OUTPUT
------------
Enter A String : PROGRAMCALL.COM
Reverse  String  Is  MOC.LLACMARGORP

Wednesday, October 10, 2012

HttpModule and HttpHandler


The Two Interceptors: HttpModule and HttpHandler

Introduction


Many times we want to implement pre-processing logic before a request hits the IIS resources. For instance you would like to apply security mechanism, URL rewriting, filter something in the request, etc. ASP.NET has provided two types of interception HttpModule and HttpHandler. This article walks through it.
Please feel free to download my free 500 question and answer videos which covers Design Pattern, UML, Function Points, Enterprise ApplicationBlocks, OOP'S, SDLC, .NET, ASP.NET, SQL Server, WCF, WPF, WWF, SharePoint, LINQ,SilverLight, .NET Best Practices @ http://www.questpond.com/

THE PROBLEM

Many times we need to inject some kind of logic before the page is requested. Some of the commonly used pre-processing logics are stat counters, URL rewriting, authentication / authorization and many more. We can do this in the code behind but then that can lead to lot of complication and tangled code. The code behind will not solve the purpose because in some implementations like authorization, we want the logic to execute before it reaches the resource. ASP.NET provides two ways of injecting logic in the request pipeline HttpHandlers and HttpModules.


HTTPHANDLER - THE EXTENSION BASED PREPROCESSOR

HttpHandler help us to inject pre-processing logic based on the extension of the file name requested. So when a page is requested, HttpHandler executes on the base of extension file names and on the base of verbs. For instance, you can visualize from the figure below how we have different handlers mapped to file extension. We can also map one handler to multiple file extensions. For instance, when any client requests for file with extension ‘GIF’ and ‘JPEG’, handler3 pre-processing logic executes.



HTTPMODULE - THE EVENT BASED PREPROCESSOR

HttpModule is an event based methodology to inject pre-processing logic before any resource is requested. When any client sends a request for a resource, the request pipeline emits a lot of events as shown in the figure below:


Below is a detailed explanation of the events. We have just pasted this from here.
  • BeginRequest: Request has been started. If you need to do something at the beginning of a request (for example, display advertisement banners at the top of each page), synchronize this event.
  • AuthenticateRequest: If you want to plug in your own custom authentication scheme (for example, look up a user against a database to validate the password), build a module that synchronizes this event and authenticates the user in a way that you want to.

  • AuthorizeRequest: This event is used internally to implement authorization mechanisms (for example, to store your access control lists (ACLs) in a database rather than in the file system). Although you can override this event, there are not many good reasons to do so.

  • PreRequestHandlerExecute: This event occurs before the HTTP handler is executed.

  • PostRequestHandlerExecute: This event occurs after the HTTP handler is executed.

  • EndRequest: Request has been completed. You may want to build a debugging module that gathers information throughout the request and then writes the information to the page.
We can register these events with the HttpModules. So when the request pipe line executes depending on the event registered, the logic from the modules is processed.

THE OVERALL PICTURE OF HANDLER AND MODULES

Now that we have gone through the basics, let's understand what is the Microsoft definition for handler and modules to get the overall picture

Reference: INFO: ASP.NET HTTP Modules and HTTP Handlers Overview
“Modules are called before and after the handler executes. Modules enable developers to intercept, participate in, or modify each individual request. Handlers are used to process individual endpoint requests. Handlers enable the ASP.NET Framework to process individual HTTP URLs or groups of URL extensions within an application. Unlike modules, only one handler is used to process a request”.


STEPS TO IMPLEMENT HTTPHANDLERS

Step 1

HttpHandlers are nothing but classes which have pre-processing logic implemented. So the first thing is to create a class project and reference System.Web namespace and implement the IHttpHandler interface as shown in the below code snippet.IHttpHandler interface has two methods which needs to be implemented; one is theProcessRequest and the other is the IsResuable. In the ProcessRequestmethod, we are just entering the URL into the file and displaying the same into the browser. We have manipulated the context response object to send the display to the browser.
using System;
using System.Web;
using System.IO;
namespace MyPipeLine
{
public class clsMyHandler : IHttpHandler
{
public void ProcessRequest(System.Web.HttpContext context)
{
context.Response.Write("The page request is " + context.Request.RawUrl.ToString());
StreamWriter sw = new StreamWriter(@"C:\requestLog.txt",true);
sw.WriteLine("Page requested at " + DateTime.Now.ToString() +
   context.Request.RawUrl); sw.Close();
}
public bool IsReusable
{
get
{
return true;
}
}
}

Step 2

In step 2, we just need to make an entry of HttpHandlers tag. In the tag, we need to specify which kind of extension requested will invoke our class.



Once done, request for page name with extension ‘Shiv’ and you should see a display as shown below. So what has happened is when the IIS sees that request is for a ‘.shiv’ page extension, it just calls the clsMyHandler class pre-processing logic.


STEPS TO IMPLEMENT HTTPMODULE

Step 1

As discussed previously, HttpModule is an event pre-processor. So the first thing is to implement the IHttpModule and register the necessary events which this module should subscribe. For instance, we have registered in this sample for BeginRequestand EndRequest events. In those events, we have just written an entry onto the log file.
public class clsMyModule : IHttpModule
{
public clsMyModule()
{}
public void Init(HttpApplication objApplication)
{
// Register event handler of the pipe line
objApplication.BeginRequest += new EventHandler(this.context_BeginRequest);
objApplication.EndRequest += new EventHandler(this.context_EndRequest);
}
public void Dispose()
{
}
public void context_EndRequest(object sender, EventArgs e)
{
StreamWriter sw = new StreamWriter(@"C:\requestLog.txt",true);
sw.WriteLine("End Request called at " + DateTime.Now.ToString()); sw.Close();
}
public void context_BeginRequest(object sender, EventArgs e)
{
StreamWriter sw = new StreamWriter(@"C:\requestLog.txt",true);
sw.WriteLine("Begin request called at " + DateTime.Now.ToString()); sw.Close();
}
}

Step 2

We need to enter those module entries into the HttpModule tag as shown in the below code snippet:



THE FINAL OUTPUT

If you run the code, you should see something like this in the RequestLog.txt. The above example is not so practical. But it will help us understand the fundamentals.
Begin request called at 11/12/2008 6:32:00 PM
End Request called at 11/12/2008 6:32:00 PM
Begin request called at 11/12/2008 6:32:03 PM
End Request called at 11/12/2008 6:32:03 PM
Begin request called at 11/12/2008 6:32:06 PM
End Request called at 11/12/2008 6:32:06 PM
Begin request called at 11/12/2008 8:36:04 PM
End Request called at 11/12/2008 8:36:04 PM
Begin request called at 11/12/2008 8:37:06 PM
End Request called at 11/12/2008 8:37:06 PM
Begin request called at 11/12/2008 8:37:09 PM
End Request called at 11/12/2008 8:37:09 PM
Begin request called at 11/12/2008 8:37:38 PM
Page requested at 11/12/2008 8:37:38 PM/WebSiteHandlerDemo/Articles.shiv
End Request called at 11/12/2008 8:37:38 PM

REFERENCE

HttpModule and HttpHandler


The Two Interceptors: HttpModule and HttpHandler

Introduction


Many times we want to implement pre-processing logic before a request hits the IIS resources. For instance you would like to apply security mechanism, URL rewriting, filter something in the request, etc. ASP.NET has provided two types of interception HttpModule and HttpHandler. This article walks through it.
Please feel free to download my free 500 question and answer videos which covers Design Pattern, UML, Function Points, Enterprise ApplicationBlocks, OOP'S, SDLC, .NET, ASP.NET, SQL Server, WCF, WPF, WWF, SharePoint, LINQ,SilverLight, .NET Best Practices @ http://www.questpond.com/

THE PROBLEM

Many times we need to inject some kind of logic before the page is requested. Some of the commonly used pre-processing logics are stat counters, URL rewriting, authentication / authorization and many more. We can do this in the code behind but then that can lead to lot of complication and tangled code. The code behind will not solve the purpose because in some implementations like authorization, we want the logic to execute before it reaches the resource. ASP.NET provides two ways of injecting logic in the request pipeline HttpHandlers and HttpModules.


HTTPHANDLER - THE EXTENSION BASED PREPROCESSOR

HttpHandler help us to inject pre-processing logic based on the extension of the file name requested. So when a page is requested, HttpHandler executes on the base of extension file names and on the base of verbs. For instance, you can visualize from the figure below how we have different handlers mapped to file extension. We can also map one handler to multiple file extensions. For instance, when any client requests for file with extension ‘GIF’ and ‘JPEG’, handler3 pre-processing logic executes.



HTTPMODULE - THE EVENT BASED PREPROCESSOR

HttpModule is an event based methodology to inject pre-processing logic before any resource is requested. When any client sends a request for a resource, the request pipeline emits a lot of events as shown in the figure below:


Below is a detailed explanation of the events. We have just pasted this from here.
  • BeginRequest: Request has been started. If you need to do something at the beginning of a request (for example, display advertisement banners at the top of each page), synchronize this event.
  • AuthenticateRequest: If you want to plug in your own custom authentication scheme (for example, look up a user against a database to validate the password), build a module that synchronizes this event and authenticates the user in a way that you want to.

  • AuthorizeRequest: This event is used internally to implement authorization mechanisms (for example, to store your access control lists (ACLs) in a database rather than in the file system). Although you can override this event, there are not many good reasons to do so.

  • PreRequestHandlerExecute: This event occurs before the HTTP handler is executed.

  • PostRequestHandlerExecute: This event occurs after the HTTP handler is executed.

  • EndRequest: Request has been completed. You may want to build a debugging module that gathers information throughout the request and then writes the information to the page.
We can register these events with the HttpModules. So when the request pipe line executes depending on the event registered, the logic from the modules is processed.

THE OVERALL PICTURE OF HANDLER AND MODULES

Now that we have gone through the basics, let's understand what is the Microsoft definition for handler and modules to get the overall picture

Reference: INFO: ASP.NET HTTP Modules and HTTP Handlers Overview
“Modules are called before and after the handler executes. Modules enable developers to intercept, participate in, or modify each individual request. Handlers are used to process individual endpoint requests. Handlers enable the ASP.NET Framework to process individual HTTP URLs or groups of URL extensions within an application. Unlike modules, only one handler is used to process a request”.


STEPS TO IMPLEMENT HTTPHANDLERS

Step 1

HttpHandlers are nothing but classes which have pre-processing logic implemented. So the first thing is to create a class project and reference System.Web namespace and implement the IHttpHandler interface as shown in the below code snippet.IHttpHandler interface has two methods which needs to be implemented; one is theProcessRequest and the other is the IsResuable. In the ProcessRequestmethod, we are just entering the URL into the file and displaying the same into the browser. We have manipulated the context response object to send the display to the browser.
using System;
using System.Web;
using System.IO;
namespace MyPipeLine
{
public class clsMyHandler : IHttpHandler
{
public void ProcessRequest(System.Web.HttpContext context)
{
context.Response.Write("The page request is " + context.Request.RawUrl.ToString());
StreamWriter sw = new StreamWriter(@"C:\requestLog.txt",true);
sw.WriteLine("Page requested at " + DateTime.Now.ToString() +
   context.Request.RawUrl); sw.Close();
}
public bool IsReusable
{
get
{
return true;
}
}
}

Step 2

In step 2, we just need to make an entry of HttpHandlers tag. In the tag, we need to specify which kind of extension requested will invoke our class.



Once done, request for page name with extension ‘Shiv’ and you should see a display as shown below. So what has happened is when the IIS sees that request is for a ‘.shiv’ page extension, it just calls the clsMyHandler class pre-processing logic.


STEPS TO IMPLEMENT HTTPMODULE

Step 1

As discussed previously, HttpModule is an event pre-processor. So the first thing is to implement the IHttpModule and register the necessary events which this module should subscribe. For instance, we have registered in this sample for BeginRequestand EndRequest events. In those events, we have just written an entry onto the log file.
public class clsMyModule : IHttpModule
{
public clsMyModule()
{}
public void Init(HttpApplication objApplication)
{
// Register event handler of the pipe line
objApplication.BeginRequest += new EventHandler(this.context_BeginRequest);
objApplication.EndRequest += new EventHandler(this.context_EndRequest);
}
public void Dispose()
{
}
public void context_EndRequest(object sender, EventArgs e)
{
StreamWriter sw = new StreamWriter(@"C:\requestLog.txt",true);
sw.WriteLine("End Request called at " + DateTime.Now.ToString()); sw.Close();
}
public void context_BeginRequest(object sender, EventArgs e)
{
StreamWriter sw = new StreamWriter(@"C:\requestLog.txt",true);
sw.WriteLine("Begin request called at " + DateTime.Now.ToString()); sw.Close();
}
}

Step 2

We need to enter those module entries into the HttpModule tag as shown in the below code snippet:



THE FINAL OUTPUT

If you run the code, you should see something like this in the RequestLog.txt. The above example is not so practical. But it will help us understand the fundamentals.
Begin request called at 11/12/2008 6:32:00 PM
End Request called at 11/12/2008 6:32:00 PM
Begin request called at 11/12/2008 6:32:03 PM
End Request called at 11/12/2008 6:32:03 PM
Begin request called at 11/12/2008 6:32:06 PM
End Request called at 11/12/2008 6:32:06 PM
Begin request called at 11/12/2008 8:36:04 PM
End Request called at 11/12/2008 8:36:04 PM
Begin request called at 11/12/2008 8:37:06 PM
End Request called at 11/12/2008 8:37:06 PM
Begin request called at 11/12/2008 8:37:09 PM
End Request called at 11/12/2008 8:37:09 PM
Begin request called at 11/12/2008 8:37:38 PM
Page requested at 11/12/2008 8:37:38 PM/WebSiteHandlerDemo/Articles.shiv
End Request called at 11/12/2008 8:37:38 PM

REFERENCE