<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Database</title>
        <link>http://geekswithblogs.net/joycsharp/category/5029.aspx</link>
        <description>Database related, specially SQL Server issues. Well the .NET codes related to database also falls in this catagory.</description>
        <language>en-US</language>
        <copyright>Mohammad Ashraful Alam</copyright>
        <managingEditor>joy_csharp@yahoo.com</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <item>
            <title>nAML: A New Revolutionary Way to Model Your .NET Applications!</title>
            <link>http://geekswithblogs.net/joycsharp/archive/2008/09/12/naml-a-new-revolutionary-way-to-model-your-.net-applications.aspx</link>
            <description>&lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/ashraful/WindowsLiveWriter/nAMLANewRevolutionaryWay.NETApplications_11FDE/naml.jpg"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="244" alt="naml" width="197" border="0" src="http://weblogs.asp.net/blogs/ashraful/WindowsLiveWriter/nAMLANewRevolutionaryWay.NETApplications_11FDE/naml_thumb.jpg" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;Understanding the architecture and code in software application plays as major factors while building good software products. Having an easy to understand visual notation, not only helps architects to model the system efficiently, but also helps developers to quickly implement that, as well as it helps the re-engineering process to easily adopt the architectural model with respect to new requirement. &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;A new visual modeling technique, termed as “nAML” (.NET Application Modeling Language) is being introduced which overcomes the limitation of typical modeling languages by providing revolutionary way within a single space to describe an application system with its structural and behavioral, as well as physical and logical components. It illustrates real world samples, from user interface experience, .NET specific language (such as C#) classes to database level SQL commands, to let software architects and developers to have a clean model for the future system. One of it’s the most powerful objectives of this new visual language is the besides an easy way to model the system, the target model will require near to zero knowledge on notation semantics from reader aspect.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;font size="2"&gt;Primary Objectives&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;The primary objectives of nAML can be considered as follows:&lt;/font&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;
    &lt;p&gt;&lt;font size="2"&gt;Provides a single space to visually describe one or more application systems with structural and behavioral components.&lt;/font&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li&gt;
    &lt;p&gt;&lt;font size="2"&gt;Provides a single space to visually describe one or more application systems with logical and physical components.&lt;/font&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li&gt;
    &lt;p&gt;&lt;font size="2"&gt;Provides a single space to visually describe one or more application systems from top to low level.&lt;/font&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li&gt;
    &lt;p&gt;&lt;font size="2"&gt;Provides a single space to visually describe a part or whole of one or more application systems.&lt;/font&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li&gt;
    &lt;p&gt;&lt;font size="2"&gt;Extremely simple and easy understand and learn from readers and designers perspective.&lt;/font&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li&gt;
    &lt;p&gt;&lt;font size="2"&gt;Concentrates on .NET applications, with its related logical and physical entities (user interface, application logic, business logic, database etc).&lt;/font&gt;&lt;/p&gt;
    &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;&lt;font size="2"&gt;Links and Downloads&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;Here is the nAML project site: &lt;/font&gt;&lt;a href="http://code.msdn.microsoft.com/nAML"&gt;&lt;font size="2"&gt;http://code.msdn.microsoft.com/nAML&lt;/font&gt;&lt;/a&gt; &lt;br /&gt;
&lt;font size="2"&gt;Download the latest specification, examples and Visio 2003 Stencil for nAML tutorial from &lt;/font&gt;&lt;a href="http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=naml&amp;amp;DownloadId=3083"&gt;&lt;font size="2"&gt;here&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt;. &lt;br /&gt;
Download Visio 2003 Stencil for nAML from &lt;/font&gt;&lt;a href="http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=naml&amp;amp;DownloadId=3084"&gt;&lt;font size="2"&gt;here&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt;.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:89abd563-5f7b-41c1-9c15-69d22a4c2289" style="PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px"&gt;Technorati Tags: &lt;a rel="tag" href="http://technorati.com/tags/architecture"&gt;architecture&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/modeling"&gt;modeling&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/.net"&gt;.net&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/asp.net"&gt;asp.net&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/development"&gt;development&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=125132"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=125132" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/joycsharp/aggbug/125132.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Mohammad Ashraful Alam</dc:creator>
            <guid>http://geekswithblogs.net/joycsharp/archive/2008/09/12/naml-a-new-revolutionary-way-to-model-your-.net-applications.aspx</guid>
            <pubDate>Fri, 12 Sep 2008 15:35:10 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/joycsharp/comments/125132.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/joycsharp/archive/2008/09/12/naml-a-new-revolutionary-way-to-model-your-.net-applications.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/joycsharp/comments/commentRss/125132.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/joycsharp/services/trackbacks/125132.aspx</trackback:ping>
        </item>
        <item>
            <title>Using .NET 2.0 Generics for Custom Entity Collection</title>
            <link>http://geekswithblogs.net/joycsharp/archive/2008/02/18/using-.net-2.0-generics-for-custom-entity-collection.aspx</link>
            <description>&lt;p&gt;&lt;font face="ver" size="2"&gt;Generics is a new feature in .NET 2.0 which allows us to create a data structure without committing to a specific data type. In the early age of .net 2.0 (i.e. .net 1.x), while using custom entity model in our application data architecture, we had to create a separate class regarding the collection for each of custom entity. &lt;/font&gt;&lt;/p&gt;
&lt;pre class="code"&gt;&lt;strong&gt;&lt;font face="ver" size="2"&gt;The custom entity&lt;/font&gt;&lt;/strong&gt;&lt;/pre&gt;
&lt;pre class="code"&gt;&lt;span style="COLOR: blue"&gt;&lt;font face="ver" size="2"&gt;public class &lt;/font&gt;&lt;/span&gt;&lt;font size="2"&gt;&lt;font face="ver"&gt;&lt;span style="COLOR: teal"&gt;SystemUser
&lt;/span&gt;{
    &lt;span style="COLOR: blue"&gt;public string &lt;/span&gt;_Name, _Password;

    &lt;span style="COLOR: blue"&gt;public &lt;/span&gt;SystemUser(&lt;span style="COLOR: blue"&gt;string &lt;/span&gt;name, &lt;span style="COLOR: blue"&gt;string &lt;/span&gt;password)
    {
        _Name = name;
        _Password = password;
    }

    &lt;span style="COLOR: blue"&gt;public string &lt;/span&gt;Password
    {
        &lt;span style="COLOR: blue"&gt;get &lt;/span&gt;{ &lt;span style="COLOR: blue"&gt;return &lt;/span&gt;_Password; }
        &lt;span style="COLOR: blue"&gt;set &lt;/span&gt;{ _Password = &lt;span style="COLOR: blue"&gt;value&lt;/span&gt;; }
    }

    &lt;span style="COLOR: blue"&gt;public string &lt;/span&gt;Name
    {
        &lt;span style="COLOR: blue"&gt;get &lt;/span&gt;{ &lt;span style="COLOR: blue"&gt;return &lt;/span&gt;_Name; }
        &lt;span style="COLOR: blue"&gt;set &lt;/span&gt;{ _Name = &lt;span style="COLOR: blue"&gt;value&lt;/span&gt;; }
    }&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;&lt;font face="ver" size="2"&gt;The old age custom entity collection class&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="ver" size="2"&gt;For a custom entity "SystemUser" we had to create a separate collection class as below:&lt;/font&gt;&lt;/p&gt;
&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;font face="ver"&gt;&lt;span style="COLOR: blue"&gt;public class &lt;/span&gt;&lt;span style="COLOR: teal"&gt;SystemUserCollection&lt;/span&gt;: &lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="ver"&gt;&lt;span style="COLOR: teal"&gt;CollectionBase
&lt;/span&gt;{
    &lt;span style="COLOR: blue"&gt;public &lt;/span&gt;&lt;span style="COLOR: teal"&gt;SystemUser &lt;/span&gt;&lt;span style="COLOR: blue"&gt;this&lt;/span&gt;[ &lt;span style="COLOR: blue"&gt;int &lt;/span&gt;index ]
    {
        &lt;span style="COLOR: blue"&gt;get&lt;/span&gt;{&lt;span style="COLOR: blue"&gt;return &lt;/span&gt;( (&lt;span style="COLOR: teal"&gt;SystemUser&lt;/span&gt;) List[index]);}
        &lt;span style="COLOR: blue"&gt;set&lt;/span&gt;{List[index]=&lt;span style="COLOR: blue"&gt;value&lt;/span&gt;;}
    }
    
    &lt;span style="COLOR: blue"&gt;public int &lt;/span&gt;Add(&lt;span style="COLOR: teal"&gt;SystemUser &lt;/span&gt;value)
    {
        &lt;span style="COLOR: blue"&gt;return &lt;/span&gt;(List.Add(value));
    }
    
    &lt;span style="COLOR: blue"&gt;public int &lt;/span&gt;IndexOf(&lt;span style="COLOR: teal"&gt;SystemUser &lt;/span&gt;value)
    {
        &lt;span style="COLOR: blue"&gt;return &lt;/span&gt;(List.IndexOf(value));
    }
    
    &lt;span style="COLOR: blue"&gt;public void &lt;/span&gt;Insert(&lt;span style="COLOR: blue"&gt;int &lt;/span&gt;index, &lt;span style="COLOR: teal"&gt;SystemUser &lt;/span&gt;value)
    {
        List.Insert(index, value);
    }
    
    &lt;span style="COLOR: blue"&gt;public void &lt;/span&gt;Remove(&lt;span style="COLOR: teal"&gt;SystemUser &lt;/span&gt;value)
    {
        List.Remove(value);    
    }
    
    &lt;span style="COLOR: blue"&gt;public bool &lt;/span&gt;Contains(&lt;span style="COLOR: teal"&gt;SystemUser &lt;/span&gt;value)
    {
        &lt;span style="COLOR: blue"&gt;return &lt;/span&gt;(List.Contains(value));    
    }
  
}
&lt;strong&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;
&lt;pre class="code"&gt;&lt;strong&gt;&lt;font face="ver" size="2"&gt;Custom entity collection using .net 2.0 generics&lt;/font&gt;&lt;/strong&gt;&lt;/pre&gt;
&lt;p&gt;&lt;font face="ver" size="2"&gt;The generics in .net 2.0 made developers life extremely easy, we can create a common collection class for all custom business entity with respect to common collection based functionality.&lt;/font&gt;&lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="COLOR: gray"&gt;&lt;font face="ver" size="2"&gt;/// &amp;lt;summary&amp;gt;
/// &lt;/font&gt;&lt;/span&gt;&lt;font size="2"&gt;&lt;font face="ver"&gt;&lt;span style="COLOR: green"&gt;This is the helper collection class, that holds &lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;
&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;font face="ver"&gt;&lt;span style="COLOR: green"&gt;generic type data.
&lt;/span&gt;&lt;span style="COLOR: gray"&gt;/// &lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;span style="COLOR: green"&gt;&lt;font face="ver" size="2"&gt;This type will be used to manipulate generic class.
&lt;/font&gt;&lt;/span&gt;&lt;font size="2"&gt;&lt;font face="ver"&gt;&lt;span style="COLOR: gray"&gt;/// &amp;lt;/summary&amp;gt;
/// &amp;lt;typeparam name="GenericType"&amp;gt;&amp;lt;/typeparam&amp;gt;
&lt;/span&gt;&lt;span style="COLOR: blue"&gt;public class &lt;/span&gt;&lt;span style="COLOR: teal"&gt;CustomCollection&lt;/span&gt;&amp;lt;GenericType&amp;gt; : &lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="ver"&gt;&lt;span style="COLOR: teal"&gt;CollectionBase
&lt;/span&gt;{
        &lt;/font&gt;&lt;/font&gt;&lt;span style="COLOR: gray"&gt;&lt;font face="ver" size="2"&gt;/// &amp;lt;summary&amp;gt;
        /// &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: green"&gt;&lt;font face="ver" size="2"&gt;Adds an object to the collection.
        &lt;/font&gt;&lt;/span&gt;&lt;font size="2"&gt;&lt;font face="ver"&gt;&lt;span style="COLOR: gray"&gt;/// &amp;lt;/summary&amp;gt;
        /// &amp;lt;param name="GenericObject"&amp;gt;&amp;lt;/param&amp;gt;
        &lt;/span&gt;&lt;span style="COLOR: blue"&gt;public void &lt;/span&gt;Add(GenericType item)
        {
            InnerList.Add(item);
        }

        &lt;/font&gt;&lt;/font&gt;&lt;span style="COLOR: gray"&gt;&lt;font face="ver" size="2"&gt;/// &amp;lt;summary&amp;gt;
        /// &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: green"&gt;&lt;font face="ver" size="2"&gt;Removes an object from the collection.
        &lt;/font&gt;&lt;/span&gt;&lt;font size="2"&gt;&lt;font face="ver"&gt;&lt;span style="COLOR: gray"&gt;/// &amp;lt;/summary&amp;gt;
        /// &amp;lt;param name="index"&amp;gt;&amp;lt;/param&amp;gt;
        &lt;/span&gt;&lt;span style="COLOR: blue"&gt;public void &lt;/span&gt;Remove(&lt;span style="COLOR: blue"&gt;int &lt;/span&gt;index)
        {
            InnerList.RemoveAt(index);
        }

        &lt;/font&gt;&lt;/font&gt;&lt;span style="COLOR: gray"&gt;&lt;font face="ver" size="2"&gt;/// &amp;lt;summary&amp;gt;
        /// &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: green"&gt;&lt;font face="ver" size="2"&gt;Gets and sets the appropriate object &lt;/font&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="code"&gt;&lt;span style="COLOR: green"&gt;&lt;font face="ver" size="2"&gt;in the specified index.
        &lt;/font&gt;&lt;/span&gt;&lt;font size="2"&gt;&lt;font face="ver"&gt;&lt;span style="COLOR: gray"&gt;/// &amp;lt;/summary&amp;gt;
        /// &amp;lt;param name="index"&amp;gt;&amp;lt;/param&amp;gt;
        /// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;
        &lt;/span&gt;&lt;span style="COLOR: blue"&gt;public &lt;/span&gt;GenericType &lt;span style="COLOR: blue"&gt;this&lt;/span&gt;[&lt;span style="COLOR: blue"&gt;int &lt;/span&gt;index]
        {
            &lt;span style="COLOR: blue"&gt;get &lt;/span&gt;{ &lt;span style="COLOR: blue"&gt;return &lt;/span&gt;((GenericType)List[index]); }
            &lt;span style="COLOR: blue"&gt;set &lt;/span&gt;{ List[index] = &lt;span style="COLOR: blue"&gt;value&lt;/span&gt;; }
        }

}&lt;/font&gt;&lt;/font&gt;&lt;span style="COLOR: green"&gt;&lt;font face="ver" size="2"&gt;//end of GenericCollection&amp;lt;GenericType&amp;gt;
&lt;/font&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;&lt;font face="ver" size="2"&gt;Using generic collection&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="ver" size="2"&gt;Generic collection classes can be used in the following way:&lt;/font&gt;&lt;/p&gt;
&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;font face="ver"&gt;&lt;span style="COLOR: blue"&gt;public static &lt;/span&gt;&lt;span style="COLOR: teal"&gt;CustomCollection&lt;/span&gt;&amp;lt;&lt;span style="COLOR: teal"&gt;SystemUser&lt;/span&gt;&amp;gt; &lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;
&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;font face="ver"&gt;GetSampleGenericCollection()
{
    &lt;span style="COLOR: teal"&gt;SystemUser &lt;/span&gt;user1 = &lt;span style="COLOR: blue"&gt;new &lt;/span&gt;&lt;span style="COLOR: teal"&gt;SystemUser&lt;/span&gt;(&lt;span style="COLOR: maroon"&gt;"ashraf"&lt;/span&gt;, &lt;span style="COLOR: maroon"&gt;"12345"&lt;/span&gt;);
    &lt;span style="COLOR: teal"&gt;SystemUser &lt;/span&gt;user2 = &lt;span style="COLOR: blue"&gt;new &lt;/span&gt;&lt;span style="COLOR: teal"&gt;SystemUser&lt;/span&gt;(&lt;span style="COLOR: maroon"&gt;"ehsan"&lt;/span&gt;, &lt;span style="COLOR: maroon"&gt;"12345"&lt;/span&gt;);
    &lt;span style="COLOR: teal"&gt;SystemUser &lt;/span&gt;user3 = &lt;span style="COLOR: blue"&gt;new &lt;/span&gt;&lt;span style="COLOR: teal"&gt;SystemUser&lt;/span&gt;(&lt;span style="COLOR: maroon"&gt;"tuhin"&lt;/span&gt;, &lt;span style="COLOR: maroon"&gt;"12345"&lt;/span&gt;);
    &lt;span style="COLOR: teal"&gt;SystemUser &lt;/span&gt;user4 = &lt;span style="COLOR: blue"&gt;new &lt;/span&gt;&lt;span style="COLOR: teal"&gt;SystemUser&lt;/span&gt;(&lt;span style="COLOR: maroon"&gt;"rabbi"&lt;/span&gt;, &lt;span style="COLOR: maroon"&gt;"12345"&lt;/span&gt;);

    &lt;span style="COLOR: teal"&gt;CustomCollection&lt;/span&gt;&amp;lt;&lt;span style="COLOR: teal"&gt;SystemUser&lt;/span&gt;&amp;gt; mySystemUserCollection &lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;
&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;font face="ver"&gt;= &lt;span style="COLOR: blue"&gt;new &lt;/span&gt;&lt;span style="COLOR: teal"&gt;CustomCollection&lt;/span&gt;&amp;lt;&lt;span style="COLOR: teal"&gt;SystemUser&lt;/span&gt;&amp;gt;();

    mySystemUserCollection.Add(user1);
    mySystemUserCollection.Add(user2);
    mySystemUserCollection.Add(user3);
    mySystemUserCollection.Add(user4);

    &lt;span style="COLOR: blue"&gt;return &lt;/span&gt;mySystemUserCollection;

}&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;
&lt;p&gt;&lt;font face="ver" size="2"&gt;Download code: &lt;/font&gt;&lt;iframe style="BORDER-RIGHT: #dde5e9 1px solid; PADDING-RIGHT: 0px; BORDER-TOP: #dde5e9 1px solid; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 3px; BORDER-LEFT: #dde5e9 1px solid; WIDTH: 240px; PADDING-TOP: 0px; BORDER-BOTTOM: #dde5e9 1px solid; HEIGHT: 66px; BACKGROUND-COLOR: #ffffff" marginwidth="0" marginheight="0" src="http://cid-907464dabda55b30.skydrive.live.com/embedrowdetail.aspx/Community/generic-collection.zip" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:b3888ebd-2dc6-4ab7-9df9-fa4e5a6c445c" style="PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px"&gt;Technorati Tags: &lt;a rel="tag" href="http://technorati.com/tags/.net"&gt;.net&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/coding"&gt;coding&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/programming"&gt;programming&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/C#"&gt;C#&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/sample"&gt;sample&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=119719"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=119719" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/joycsharp/aggbug/119719.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Mohammad Ashraful Alam</dc:creator>
            <guid>http://geekswithblogs.net/joycsharp/archive/2008/02/18/using-.net-2.0-generics-for-custom-entity-collection.aspx</guid>
            <pubDate>Mon, 18 Feb 2008 11:12:59 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/joycsharp/comments/119719.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/joycsharp/archive/2008/02/18/using-.net-2.0-generics-for-custom-entity-collection.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/joycsharp/comments/commentRss/119719.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/joycsharp/services/trackbacks/119719.aspx</trackback:ping>
        </item>
        <item>
            <title>ASP.NET Role Based Security: The Basics</title>
            <link>http://geekswithblogs.net/joycsharp/archive/2008/02/18/asp.net-role-based-security-the-basics.aspx</link>
            <description>&lt;p align="justify"&gt;&lt;font face="ver" size="2"&gt;Authentication and authorization is the two basic part of the user-end security in asp.net web applications. After to successful authentication of a user, authorization takes the place according to which the authenticated user are allowed to access to the corresponding resources in the web application.&lt;/font&gt;&lt;/p&gt;
&lt;p align="justify"&gt;&lt;font face="ver" size="2"&gt;Role based security is very basic requirements in the current trend of web applications. Mostly there are two roles involved, which are registered user and the admin users. However in a web application a user can have multiple roles which can be authorized on page and page control level. Today we'll check a basic sample which includes page based authorizations for specific roles.&lt;/font&gt;&lt;/p&gt;
&lt;p align="justify"&gt;&lt;font face="ver" size="2"&gt;To implement the basic role based security, there are three points to be considered. In this example we are considering two different roles "member" and "admin". There are two separate folders named "member", which can be accessed by any logged in user, including admin users and "admin", where only the user who contains the "admin" role can access the child resources (page, images etc).&lt;/font&gt;&lt;/p&gt;
&lt;p align="justify"&gt;&lt;strong&gt;&lt;font face="ver" size="2"&gt;1. Defining the authorization regions in web.config&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p align="justify"&gt;&lt;font face="ver" size="2"&gt;The following xml tags are required to be added under the "configuration" node of the web.config.&lt;/font&gt;&lt;/p&gt;
&lt;p align="justify"&gt;&lt;font face="ver" size="2"&gt;Defining security authorization for "member" users&lt;/font&gt;&lt;/p&gt;
&lt;div align="justify"&gt;
&lt;pre class="code"&gt;&lt;font face="ver" size="2"&gt;  &lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;location &lt;/span&gt;&lt;span style="COLOR: red"&gt;path&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;member&lt;/span&gt;"&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="ver"&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;system.web&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="ver"&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;authorization&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="ver"&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;deny &lt;/span&gt;&lt;span style="COLOR: red"&gt;users&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;?&lt;/span&gt;"&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="ver"&gt;&lt;span style="COLOR: blue"&gt;/&amp;gt;
      &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;authorization&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="ver"&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;system.web&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="ver"&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
  &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;location&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;span style="COLOR: blue"&gt;&lt;font face="ver" size="2"&gt;&amp;gt;
&lt;/font&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p align="justify"&gt;&lt;font face="ver" size="2"&gt;Defining security authorization for "admin" users&lt;/font&gt;&lt;/p&gt;
&lt;div align="justify"&gt;
&lt;pre class="code"&gt;&lt;font face="ver" size="2"&gt;  &lt;span style="COLOR: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;location &lt;/span&gt;&lt;span style="COLOR: red"&gt;path&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;admin&lt;/span&gt;"&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="ver"&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;system.web&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="ver"&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
      &amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;authorization&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="ver"&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;allow &lt;/span&gt;&lt;span style="COLOR: red"&gt;roles&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;admin&lt;/span&gt;"&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="ver"&gt;&lt;span style="COLOR: blue"&gt;/&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;deny &lt;/span&gt;&lt;span style="COLOR: red"&gt;users&lt;/span&gt;&lt;span style="COLOR: blue"&gt;=&lt;/span&gt;"&lt;span style="COLOR: blue"&gt;*&lt;/span&gt;"&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="ver"&gt;&lt;span style="COLOR: blue"&gt;/&amp;gt;
      &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;authorization&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="ver"&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;system.web&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="ver"&gt;&lt;span style="COLOR: blue"&gt;&amp;gt;
  &amp;lt;/&lt;/span&gt;&lt;span style="COLOR: maroon"&gt;location&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;span style="COLOR: blue"&gt;&lt;font face="ver" size="2"&gt;&amp;gt;
&lt;/font&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p align="justify"&gt;&lt;strong&gt;&lt;font face="ver" size="2"&gt;2. Authenticating the user&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p align="justify"&gt;&lt;font face="ver" size="2"&gt;After the successful authentication, the following codes are required to establish the form based authentication for the corresponding user.&lt;/font&gt;&lt;/p&gt;
&lt;div align="justify"&gt;
&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;font face="ver"&gt;&lt;span style="COLOR: green"&gt;//Authenticating the user Identity. &lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div align="justify"&gt;
&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;font face="ver"&gt;System.Web.Security.&lt;span style="COLOR: teal"&gt;FormsAuthentication&lt;/span&gt;.RedirectFromLoginPage&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div align="justify"&gt;
&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;font face="ver"&gt;(&lt;span style="COLOR: maroon"&gt;"member1"&lt;/span&gt;, &lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.CheckBox1.Checked);&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p align="justify"&gt;&lt;strong&gt;&lt;font face="ver" size="2"&gt;3. Implementing the role based security&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p align="justify"&gt;&lt;font face="ver" size="2"&gt;The "Application_AuthenticateRequest" event which was defined in the "Global.asax" file, will include the appropriate codes regarding the role info of the logged in user, which will be accesses each time for any web request in this web application. This can be done in either "cache" or "cookie" mechanism.&lt;/font&gt;&lt;/p&gt;
&lt;p align="justify"&gt;&lt;u&gt;Cache based mechanism&lt;/u&gt;&lt;/p&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;    &lt;span style="COLOR: blue"&gt;protected&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; Application_AuthenticateRequest(&lt;span style="COLOR: teal"&gt;Object&lt;/span&gt; sender, &lt;span style="COLOR: teal"&gt;EventArgs&lt;/span&gt; e)&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;    {&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;        &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (&lt;span style="COLOR: teal"&gt;HttpContext&lt;/span&gt;.Current.User != &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;        {&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;            &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (&lt;span style="COLOR: teal"&gt;HttpContext&lt;/span&gt;.Current.User.Identity.IsAuthenticated)&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;            {&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (&lt;span style="COLOR: teal"&gt;HttpContext&lt;/span&gt;.Current.User.Identity.AuthenticationType != &lt;span style="COLOR: maroon"&gt;"Forms"&lt;/span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                    &lt;span style="COLOR: blue"&gt;throw&lt;/span&gt; &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: teal"&gt;Exception&lt;/span&gt;(&lt;span style="COLOR: maroon"&gt;"Only forms authentication is supported, not "&lt;/span&gt; +&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                        &lt;span style="COLOR: teal"&gt;HttpContext&lt;/span&gt;.Current.User.Identity.AuthenticationType);&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                System.Security.Principal.&lt;span style="COLOR: teal"&gt;IIdentity&lt;/span&gt; userId = &lt;span style="COLOR: teal"&gt;HttpContext&lt;/span&gt;.Current.User.Identity;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                &lt;span style="COLOR: green"&gt;//if role info is already NOT loaded into cache, put the role info in cache&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (System.Web.&lt;span style="COLOR: teal"&gt;HttpContext&lt;/span&gt;.Current.Cache[userId.Name] == &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                {&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                    &lt;span style="COLOR: blue"&gt;string&lt;/span&gt;[] roles;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                    &lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                    &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (userId.Name == &lt;span style="COLOR: maroon"&gt;"admin1"&lt;/span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                        roles = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt;[1] { &lt;span style="COLOR: maroon"&gt;"admin"&lt;/span&gt; };&lt;span style="COLOR: green"&gt;//this info will be generally collected from database&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                    &lt;span style="COLOR: blue"&gt;else&lt;/span&gt; &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (userId.Name == &lt;span style="COLOR: maroon"&gt;"member1"&lt;/span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                        roles = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt;[1] { &lt;span style="COLOR: maroon"&gt;"member"&lt;/span&gt; };&lt;span style="COLOR: green"&gt;//this info will be generally collected from database&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                    &lt;span style="COLOR: blue"&gt;else&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                        roles = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt;[1] { &lt;span style="COLOR: maroon"&gt;"public"&lt;/span&gt; };&lt;span style="COLOR: green"&gt;//this info will be generally collected from database                   &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                    &lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                    &lt;span style="COLOR: green"&gt;//1 hour sliding expiring time. Adding the roles in chache. This will be used in Application_AuthenticateRequest event located in Global.ascx.cs file to attach user Principal object.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                    System.Web.&lt;span style="COLOR: teal"&gt;HttpContext&lt;/span&gt;.Current.Cache.Add(userId.Name, roles, &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;, &lt;span style="COLOR: teal"&gt;DateTime&lt;/span&gt;.MaxValue, &lt;span style="COLOR: teal"&gt;TimeSpan&lt;/span&gt;.FromHours(1), System.Web.Caching.&lt;span style="COLOR: teal"&gt;CacheItemPriority&lt;/span&gt;.BelowNormal, &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                }&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                &lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                &lt;span style="COLOR: green"&gt;//now assign the user role in the current security context&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                &lt;span style="COLOR: teal"&gt;HttpContext&lt;/span&gt;.Current.User = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; System.Security.Principal.&lt;span style="COLOR: teal"&gt;GenericPrincipal&lt;/span&gt;(userId, (&lt;span style="COLOR: blue"&gt;string&lt;/span&gt;[])System.Web.&lt;span style="COLOR: teal"&gt;HttpContext&lt;/span&gt;.Current.Cache[userId.Name]);&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;            }&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;        }&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;    }&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;u&gt;Cookie based mechanism&lt;/u&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt; 
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;    &lt;span style="COLOR: blue"&gt;protected&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; Application_AuthenticateRequest(&lt;span style="COLOR: teal"&gt;Object&lt;/span&gt; sender, &lt;span style="COLOR: teal"&gt;EventArgs&lt;/span&gt; e)&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;    {&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;        &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (&lt;span style="COLOR: teal"&gt;HttpContext&lt;/span&gt;.Current.User != &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;        {&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;            &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (Request.IsAuthenticated == &lt;span style="COLOR: blue"&gt;true&lt;/span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;            {&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (&lt;span style="COLOR: teal"&gt;HttpContext&lt;/span&gt;.Current.User.Identity.AuthenticationType != &lt;span style="COLOR: maroon"&gt;"Forms"&lt;/span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                    &lt;span style="COLOR: blue"&gt;throw&lt;/span&gt; &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: teal"&gt;Exception&lt;/span&gt;(&lt;span style="COLOR: maroon"&gt;"Only forms authentication is supported, not "&lt;/span&gt; +&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                        &lt;span style="COLOR: teal"&gt;HttpContext&lt;/span&gt;.Current.User.Identity.AuthenticationType);&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                &lt;span style="COLOR: green"&gt;//Create/Retrieve cookie and initizalyze the role info in the current security context&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; userInformation = &lt;span style="COLOR: teal"&gt;String&lt;/span&gt;.Empty;&lt;span style="COLOR: green"&gt;//where the cookie info will be placed&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                &lt;span style="COLOR: blue"&gt;string&lt;/span&gt;[] roles;&lt;span style="COLOR: green"&gt;//where the user role will be placed&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                &lt;span style="COLOR: green"&gt;// Create the roles cookie if it doesn't exist yet for this session.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; ((Request.Cookies[&lt;span style="COLOR: maroon"&gt;"cnstUserRole"&lt;/span&gt;] == &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;) || (Request.Cookies[&lt;span style="COLOR: maroon"&gt;"cnstUserRole"&lt;/span&gt;].Value == &lt;span style="COLOR: maroon"&gt;""&lt;/span&gt;))&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                {&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                    &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (&lt;span style="COLOR: teal"&gt;HttpContext&lt;/span&gt;.Current.User.Identity.Name == &lt;span style="COLOR: maroon"&gt;"admin1"&lt;/span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                        roles = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt;[1] { &lt;span style="COLOR: maroon"&gt;"admin"&lt;/span&gt; };&lt;span style="COLOR: green"&gt;//this info will be generally collected from database&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                    &lt;span style="COLOR: blue"&gt;else&lt;/span&gt; &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (&lt;span style="COLOR: teal"&gt;HttpContext&lt;/span&gt;.Current.User.Identity.Name == &lt;span style="COLOR: maroon"&gt;"member1"&lt;/span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                        roles = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt;[1] { &lt;span style="COLOR: maroon"&gt;"member"&lt;/span&gt; };&lt;span style="COLOR: green"&gt;//this info will be generally collected from database&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                    &lt;span style="COLOR: blue"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                        roles = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt;[1] { &lt;span style="COLOR: maroon"&gt;"public"&lt;/span&gt; };&lt;span style="COLOR: green"&gt;//this info will be generally collected from database                   &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                    &lt;span style="COLOR: green"&gt;// Create a string to persist the role and user id&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                    userInformation = roles[0] + &lt;span style="COLOR: maroon"&gt;";"&lt;/span&gt; + Context.User.Identity.Name;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                    &lt;span style="COLOR: green"&gt;// Create a cookie authentication ticket.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                    &lt;span style="COLOR: teal"&gt;FormsAuthenticationTicket&lt;/span&gt; ticket = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: teal"&gt;FormsAuthenticationTicket&lt;/span&gt;(&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                        1,                              &lt;span style="COLOR: green"&gt;// version&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                        User.Identity.Name,             &lt;span style="COLOR: green"&gt;// user name&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                        &lt;span style="COLOR: teal"&gt;DateTime&lt;/span&gt;.Now,                   &lt;span style="COLOR: green"&gt;// issue time&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                        &lt;span style="COLOR: teal"&gt;DateTime&lt;/span&gt;.Now.AddHours(1),       &lt;span style="COLOR: green"&gt;// expires every hour&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                        &lt;span style="COLOR: blue"&gt;false&lt;/span&gt;,                          &lt;span style="COLOR: green"&gt;// don't persist cookie&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                        userInformation&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                        );&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                    &lt;span style="COLOR: green"&gt;// Encrypt the ticket&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                    &lt;span style="COLOR: teal"&gt;String&lt;/span&gt; cookieStr = &lt;span style="COLOR: teal"&gt;FormsAuthentication&lt;/span&gt;.Encrypt(ticket);&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                    &lt;span style="COLOR: green"&gt;// Send the cookie to the client&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                    Response.Cookies[&lt;span style="COLOR: maroon"&gt;"cnstUserRole"&lt;/span&gt;].Value = cookieStr;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                    Response.Cookies[&lt;span style="COLOR: maroon"&gt;"cnstUserRole"&lt;/span&gt;].Path = &lt;span style="COLOR: maroon"&gt;"/"&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                    Response.Cookies[&lt;span style="COLOR: maroon"&gt;"cnstUserRole"&lt;/span&gt;].Expires = &lt;span style="COLOR: teal"&gt;DateTime&lt;/span&gt;.Now.AddMinutes(1);&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                }&lt;span style="COLOR: green"&gt;//if role cookie not found in local pc&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                &lt;span style="COLOR: blue"&gt;else&lt;/span&gt;&lt;span style="COLOR: green"&gt;//we are getting the role info from cookie&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                {&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                    &lt;span style="COLOR: green"&gt;// Get roles from roles cookie&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                    &lt;span style="COLOR: teal"&gt;FormsAuthenticationTicket&lt;/span&gt; ticket = &lt;span style="COLOR: teal"&gt;FormsAuthentication&lt;/span&gt;.Decrypt(Context.Request.Cookies[&lt;span style="COLOR: maroon"&gt;"cnstUserRole"&lt;/span&gt;].Value);&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                    userInformation = ticket.UserData;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                    &lt;span style="COLOR: green"&gt;//info[0] contains the single role and info[1] contains the user name&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                    &lt;span style="COLOR: blue"&gt;string&lt;/span&gt;[] cookieInfo = userInformation.Split(&lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: blue"&gt;char&lt;/span&gt;[] { &lt;span style="COLOR: maroon"&gt;';'&lt;/span&gt; });&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                    roles = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt;[1] { cookieInfo[0] };&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                }&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                &lt;span style="COLOR: green"&gt;//now assign the user role in the current security context&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;                Context.User = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; System.Security.Principal.&lt;span style="COLOR: teal"&gt;GenericPrincipal&lt;/span&gt;(Context.User.Identity, roles);&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt; &lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;            }&lt;span style="COLOR: green"&gt;//if (Request.IsAuthenticated == true) &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;        }&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;    }&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0in 0in 0pt"&gt; &lt;/div&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;
&lt;p&gt;&lt;font face="ver" size="2"&gt;Download source code: &lt;/font&gt;&lt;/p&gt;
&lt;p align="justify"&gt;&lt;iframe style="BORDER-RIGHT: #dde5e9 1px solid; PADDING-RIGHT: 0px; BORDER-TOP: #dde5e9 1px solid; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 3px; BORDER-LEFT: #dde5e9 1px solid; WIDTH: 240px; PADDING-TOP: 0px; BORDER-BOTTOM: #dde5e9 1px solid; HEIGHT: 26px; BACKGROUND-COLOR: #ffffff" marginwidth="0" marginheight="0" src="http://cid-907464dabda55b30.skydrive.live.com/embedrow.aspx/Community/role-based-security-with-caching.zip" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;iframe style="BORDER-RIGHT: #dde5e9 1px solid; PADDING-RIGHT: 0px; BORDER-TOP: #dde5e9 1px solid; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 3px; BORDER-LEFT: #dde5e9 1px solid; WIDTH: 240px; PADDING-TOP: 0px; BORDER-BOTTOM: #dde5e9 1px solid; HEIGHT: 26px; BACKGROUND-COLOR: #ffffff" marginwidth="0" marginheight="0" src="http://cid-907464dabda55b30.skydrive.live.com/embedrow.aspx/Community/role-based-security-with-cookie.zip" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:6a1653e8-6e74-4a49-bb68-4185dbf740fc" style="PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px"&gt;Technorati Tags: &lt;a rel="tag" href="http://technorati.com/tags/asp.net"&gt;asp.net&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/security"&gt;security&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/programming"&gt;programming&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/coding"&gt;coding&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/C#"&gt;C#&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/.net"&gt;.net&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=119718"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=119718" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/joycsharp/aggbug/119718.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Mohammad Ashraful Alam</dc:creator>
            <guid>http://geekswithblogs.net/joycsharp/archive/2008/02/18/asp.net-role-based-security-the-basics.aspx</guid>
            <pubDate>Mon, 18 Feb 2008 10:31:40 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/joycsharp/comments/119718.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/joycsharp/archive/2008/02/18/asp.net-role-based-security-the-basics.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/joycsharp/comments/commentRss/119718.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/joycsharp/services/trackbacks/119718.aspx</trackback:ping>
        </item>
        <item>
            <title>Performing Long Running Operation with Asynchronous Page in ASP.NET 2.0</title>
            <link>http://geekswithblogs.net/joycsharp/archive/2007/11/22/117039.aspx</link>
            <description>&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:8284517b-bea9-4aa5-ac11-f3d7009ea9ab" style="PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; FLOAT: none; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px"&gt;Technorati Tags: &lt;a rel="tag" href="http://technorati.com/tags/asp.net"&gt;asp.net&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/async"&gt;async&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/web%20service"&gt;web service&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/performance"&gt;performance&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/database"&gt;database&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/joycsharp/WindowsLiveWriter/AsyncPageinASP.NET2.0_A9C1/fire_2.jpg"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="144" alt="fire" width="190" border="0" src="http://geekswithblogs.net/images/geekswithblogs_net/joycsharp/WindowsLiveWriter/AsyncPageinASP.NET2.0_A9C1/fire_thumb.jpg" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana" size="2"&gt;There are few cases in current web applications, where it involves long running operations. For instance, a system admin uploads 1 gig of data in the system, which will be processed by the system for 30-40 minutes to be splitted and putted properly in the database system, as well as notifying other system user regarding the availability if data. &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana" size="2"&gt;In the traditional approach of web application, the user has to wait for the whole time until the whole process needs to be completed. The modern age of web application includes a technique where the user doesn't required to be wait to complete the whole process with the current page, where as they can move on other page (or even can close the browser) or if they resides on that page the system will show a simple progress bar , which stops when the data processing (or the long running operation) completes. The corresponding technique that implies this usability feature is using an asynchronous model. &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana" size="2"&gt;Before the asp.net 2.0 ages, creating an asynchronous model was very complex and time consuming along with several over-heads. ASP.NET 2.0 comes with a new nice feature, where we can declare and use a page easily in asynchronous style. Besides the easy implementation model, ASP.NET asynchronous page utilizes ASP.NET threads efficiently. While calling a long running database query or web service, at the moment the request reaches at the asynchronous point, the corresponding asynchronous operation starts without keeping the current ASP.NET allocated, and thus lets the thread to be returned back to the thread pool. As soon as the asynchronous process completes, another ASP.NET thread get allocated and continues accordingly. This model really improves the utilization of ASP.NET thread pool and thus improves the scalability of the corresponding web applications. More can be found &lt;/font&gt;&lt;a target="_blank" href="http://msdn.microsoft.com/msdnmag/issues/07/03/WickedCode/"&gt;&lt;font face="Verdana" size="2"&gt;here&lt;/font&gt;&lt;/a&gt;&lt;font face="Verdana" size="2"&gt;.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana" size="2"&gt;To make a web page asynchronous, we just have to put a property in the page directive as follows:&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;font face="Verdana" size="2"&gt;&amp;lt;%@ Page Async="true" ...&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana" size="2"&gt;There are two different implementation model for ASP.NET 2.0 asynchronous pages, with respect to database and web-service call. &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;font face="Arial" size="3"&gt;Implementation model for database&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana" size="2"&gt;The implementation model for database query requires a "PageAsyncTask" class to be set with few event handler methods such as "Begin Event Handler", "End Event Handler", "Timeout Event Handler" etc. This task should be registered as an Asynchronous tasks to continue and complete the asynchronous scenario properly.&lt;/font&gt;&lt;/p&gt;
&lt;div style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: courier new"&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;partial&lt;/span&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: teal"&gt;AsyncPageTask&lt;/span&gt; : System.Web.UI.&lt;span style="COLOR: teal"&gt;Page&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;{&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: teal"&gt;SqlConnection&lt;/span&gt; _connection;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: teal"&gt;SqlCommand&lt;/span&gt; _command;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;private&lt;/span&gt; &lt;span style="COLOR: teal"&gt;SqlDataReader&lt;/span&gt; _reader;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;    &lt;span style="COLOR: teal"&gt;IAsyncResult&lt;/span&gt; BeginAsyncOperation(&lt;span style="COLOR: blue"&gt;object&lt;/span&gt; sender, &lt;span style="COLOR: teal"&gt;EventArgs&lt;/span&gt; e, &lt;span style="COLOR: teal"&gt;AsyncCallback&lt;/span&gt; cb, &lt;span style="COLOR: blue"&gt;object&lt;/span&gt; state)&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;    {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        Response.Write(&lt;span style="COLOR: maroon"&gt;"Starts at: "&lt;/span&gt; + &lt;span style="COLOR: teal"&gt;DateTime&lt;/span&gt;.Now.ToString());&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        _command = &lt;span style="COLOR: teal"&gt;DAL&lt;/span&gt;.GetCommandForInsertRecord();&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        _connection = _command.Connection;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; _command.BeginExecuteReader(cb, state);&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;    }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; EndAsyncOperation(&lt;span style="COLOR: teal"&gt;IAsyncResult&lt;/span&gt; ar)&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;    {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        _reader = _command.EndExecuteReader(ar);&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        Response.Write(&lt;span style="COLOR: maroon"&gt;" Ends at: "&lt;/span&gt; + &lt;span style="COLOR: teal"&gt;DateTime&lt;/span&gt;.Now.ToString());&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;    }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; TimeoutAsyncOperation(&lt;span style="COLOR: teal"&gt;IAsyncResult&lt;/span&gt; ar)&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;    {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;    }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;override&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; Dispose()&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;    {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (_connection != &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;)&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;            _connection.Close();&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;base&lt;/span&gt;.Dispose();&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;    }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;protected&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; btnClick_Click(&lt;span style="COLOR: blue"&gt;object&lt;/span&gt; sender, &lt;span style="COLOR: teal"&gt;EventArgs&lt;/span&gt; e)&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;    {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        Response.Write(&lt;span style="COLOR: maroon"&gt;"Hello "&lt;/span&gt;);&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        &lt;span style="COLOR: teal"&gt;PageAsyncTask&lt;/span&gt; task = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: teal"&gt;PageAsyncTask&lt;/span&gt;(&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;            &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: teal"&gt;BeginEventHandler&lt;/span&gt;(BeginAsyncOperation),&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;            &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: teal"&gt;EndEventHandler&lt;/span&gt;(EndAsyncOperation),&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;            &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: teal"&gt;EndEventHandler&lt;/span&gt;(TimeoutAsyncOperation),&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;            &lt;span style="COLOR: blue"&gt;null&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        );&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        RegisterAsyncTask(task);&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;    }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;}&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;font face="Arial" size="3"&gt;&lt;strong&gt;Implementation model for web service&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana" size="2"&gt;The implementation model for web service call is much more simpler than the database query. Ii just includes creating an web service instance, followed by calling the MethodName"Async" (for instance, if the web method name is "HelloWorld" then its asynchronous method name is "HelloWorldAsync". Besides the calling the asynchronous method for a web service method, we can register it's complete event handler to perform some post completion tasks.&lt;/font&gt;&lt;/p&gt;
&lt;div style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: courier new"&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;protected&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; btnClick_Click(&lt;span style="COLOR: blue"&gt;object&lt;/span&gt; sender, &lt;span style="COLOR: teal"&gt;EventArgs&lt;/span&gt; e)&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;    {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        Response.Write(&lt;span style="COLOR: maroon"&gt;"Starts at: "&lt;/span&gt; + &lt;span style="COLOR: teal"&gt;DateTime&lt;/span&gt;.Now.ToString());&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        MyWebService.&lt;span style="COLOR: teal"&gt;WebService&lt;/span&gt; MyWS = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; MyWebService.&lt;span style="COLOR: teal"&gt;WebService&lt;/span&gt;();&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        MyWS.HelloWorldCompleted += &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; MyWebService.&lt;span style="COLOR: teal"&gt;HelloWorldCompletedEventHandler&lt;/span&gt;(MyWS_HelloWorldCompleted);&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        MyWS.HelloWorldAsync();&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;    }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; MyWS_HelloWorldCompleted(&lt;span style="COLOR: blue"&gt;object&lt;/span&gt; sender, MyWebService.&lt;span style="COLOR: teal"&gt;HelloWorldCompletedEventArgs&lt;/span&gt; e)&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;    {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        Response.Write(&lt;span style="COLOR: maroon"&gt;" Ends at: "&lt;/span&gt; + &lt;span style="COLOR: teal"&gt;DateTime&lt;/span&gt;.Now.ToString());&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;    }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;Download Source code: &lt;iframe style="BORDER-RIGHT: #dde5e9 1px solid; PADDING-RIGHT: 0px; BORDER-TOP: #dde5e9 1px solid; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 3px; BORDER-LEFT: #dde5e9 1px solid; WIDTH: 240px; PADDING-TOP: 0px; BORDER-BOTTOM: #dde5e9 1px solid; HEIGHT: 66px; BACKGROUND-COLOR: #ffffff" marginwidth="0" marginheight="0" src="http://cid-907464dabda55b30.skydrive.live.com/embedrowdetail.aspx/Community/asp.net-async-page.zip" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fgeekswithblogs.net%2fjoycsharp%2farchive%2f2007%2f11%2f22%2f117039.aspx"&gt;&lt;img alt="kick it on DotNetKicks.com" border="0" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fgeekswithblogs.net%2fjoycsharp%2farchive%2f2007%2f11%2f22%2f117039.aspx" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=117039"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=117039" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/joycsharp/aggbug/117039.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Mohammad Ashraful Alam</dc:creator>
            <guid>http://geekswithblogs.net/joycsharp/archive/2007/11/22/117039.aspx</guid>
            <pubDate>Thu, 22 Nov 2007 07:29:04 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/joycsharp/comments/117039.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/joycsharp/archive/2007/11/22/117039.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/joycsharp/comments/commentRss/117039.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/joycsharp/services/trackbacks/117039.aspx</trackback:ping>
        </item>
        <item>
            <title>Performance Benchmark on Database Column and Row Expansion</title>
            <link>http://geekswithblogs.net/joycsharp/archive/2007/11/19/116936.aspx</link>
            <description>&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/joycsharp/WindowsLiveWriter/PerformanceBenchmarkonDatabaseColumnandR_EC03/speed_2.jpg"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="95" alt="speed" width="130" border="0" src="http://geekswithblogs.net/images/geekswithblogs_net/joycsharp/WindowsLiveWriter/PerformanceBenchmarkonDatabaseColumnandR_EC03/speed_thumb.jpg" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana" size="2"&gt;What performs better – Expanding DB column or expanding db row? My benchmark test shows expanding DB column performs better, on the following machine configuration:&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana" size="2"&gt;Processor: Intel® Pentium® 4; 2.66 GHz; &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana" size="2"&gt;Memory: 960 RAM. &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana" size="2"&gt;Operating System: Windows XP, Version 2002, Service Pack 2.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;font face="Verdana" size="2"&gt;Expanding Columns &lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana" size="2"&gt;A table having 4 columns with nchar(10) data type with 20,112 rows, query executes:&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana" size="2"&gt;SQL Server Execution Times: CPU time = 47 ms, elapsed time = 125 ms.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana" size="2"&gt;Scan count 1, logical reads 232, physical reads 0, read-ahead reads 0.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;font face="Verdana" size="2"&gt;Expanding Rows&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana" size="2"&gt;A table having 1 column with nchar(10) data type with 80,017 rows, query executes:&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana" size="2"&gt;SQL Server Execution Times: CPU time = 63 ms, elapsed time = 253 ms.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana" size="2"&gt;Scan count 1, logical reads 301, physical reads 0, read-ahead reads 0.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=116936"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=116936" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/joycsharp/aggbug/116936.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Mohammad Ashraful Alam</dc:creator>
            <guid>http://geekswithblogs.net/joycsharp/archive/2007/11/19/116936.aspx</guid>
            <pubDate>Mon, 19 Nov 2007 10:50:59 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/joycsharp/comments/116936.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/joycsharp/archive/2007/11/19/116936.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/joycsharp/comments/commentRss/116936.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/joycsharp/services/trackbacks/116936.aspx</trackback:ping>
        </item>
        <item>
            <title>Efficient Batch Operation From ASP.NET 2.0 Using SQL Server 2005 XML Data Type</title>
            <link>http://geekswithblogs.net/joycsharp/archive/2007/11/19/116933.aspx</link>
            <description>&lt;p&gt;&lt;font size="2"&gt;One of the good practice while developing high performance web application is to reduce the database roundtrip as much as possible. In the current trend of web applications, its a very common to enable users to delete multiple items in a list user interface at a time.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/joycsharp/WindowsLiveWriter/f803cbd01dba_D8CF/list.png"&gt;&lt;font color="#333333" size="2"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="167" alt="list" width="244" border="0" src="http://geekswithblogs.net/images/geekswithblogs_net/joycsharp/WindowsLiveWriter/f803cbd01dba_D8CF/list_thumb.png" /&gt;&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;To perform this type of batch delete operation, one common mistake that happens by beginner developers are to calling the data access method repetitively for each item with in a loop as below:&lt;/font&gt;&lt;/p&gt;
&lt;div style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: courier new"&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;For&lt;/span&gt; &lt;span style="COLOR: blue"&gt;Each&lt;/span&gt; row &lt;span style="COLOR: blue"&gt;As&lt;/span&gt; GridViewRow &lt;span style="COLOR: blue"&gt;In&lt;/span&gt; gvEmployees.Rows&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;            &lt;span style="COLOR: green"&gt;' Access the CheckBox &lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;            &lt;span style="COLOR: blue"&gt;Dim&lt;/span&gt; cb &lt;span style="COLOR: blue"&gt;As&lt;/span&gt; CheckBox = &lt;span style="COLOR: blue"&gt;CType&lt;/span&gt;(row.FindControl(&lt;span style="COLOR: maroon"&gt;"chkEmployeeSelector"&lt;/span&gt;), CheckBox)&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;            &lt;span style="COLOR: blue"&gt;If&lt;/span&gt; cb &lt;span style="COLOR: blue"&gt;IsNot&lt;/span&gt; &lt;span style="COLOR: blue"&gt;Nothing&lt;/span&gt; &lt;span style="COLOR: blue"&gt;AndAlso&lt;/span&gt; cb.Checked &lt;span style="COLOR: blue"&gt;Then&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;                &lt;span style="COLOR: green"&gt;' First, get the EmployeeID for the selected row &lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;                &lt;span style="COLOR: blue"&gt;Dim&lt;/span&gt; employeeId &lt;span style="COLOR: blue"&gt;As&lt;/span&gt; SqlInt32 = &lt;span style="COLOR: blue"&gt;CType&lt;/span&gt;(gvEmployees.DataKeys(row.RowIndex).Value, SqlInt32)&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;                &lt;span style="COLOR: green"&gt;' Deleting a employee... &lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;                DAL.Employee.Delete.(employeeId) &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;            &lt;span style="COLOR: blue"&gt;End&lt;/span&gt; &lt;span style="COLOR: blue"&gt;If&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;Next&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;A good approach regarding this issue is to send all of the employee id's at a time to the database stored procedure, so that all the deletion operation can be handled at a time, and thus reducing the cost with respect to database roundtrip! BUT one basic problem with this approach is SQL Server doesn't support array, and thus we can't pass the list of ID's as an array! Then? &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;Oh yes! We have XML data type available is SQL Server 2005, well we can utilize that concept easily. How? Easy! Just to create the list as an xml and then pass to the corresponding stored procedure. The stored procedure will extract the xml accordingly and perform required operation individually on each item. &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;&lt;strong&gt;Application End:&lt;/strong&gt; &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;The method below converts a .net generic list to a xml representation of list of Id's which is passed to stored procedure to perform required batch operation:  &lt;/font&gt;&lt;/p&gt;
&lt;div style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: courier new"&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;static&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; FormatXMLForIdArray(System.Collections.Generic.&lt;span style="COLOR: teal"&gt;List&lt;/span&gt;&amp;lt;SqlInt32&amp;gt; idsToList)&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;    {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        &lt;span style="COLOR: green"&gt;//converting the list to xml first &lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        StringBuilder xmlString = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; StringBuilder();&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;for&lt;/span&gt; (&lt;span style="COLOR: blue"&gt;int&lt;/span&gt; i = 0; i &amp;lt; idsToList.Count; i++)&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        {&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;            xmlString.AppendFormat(&lt;span style="COLOR: maroon"&gt;"&amp;lt;Id&amp;gt;{0}&amp;lt;/Id&amp;gt;"&lt;/span&gt;, idsToList[i]);&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        }&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;        &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; xmlString.ToString();&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;    } &lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;&lt;strong&gt;Stored Procedure End:&lt;/strong&gt; &lt;/font&gt;&lt;/p&gt;
&lt;div style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: courier new"&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;ALTER PROCEDURE &lt;/span&gt;spr_Employee_DeleteEmployeeList &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;@EmployeeSystemUserIdList xml &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;AS &lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt; &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;DELETE &lt;/span&gt;App_Employee &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;&lt;span style="COLOR: blue"&gt;WHERE &lt;/span&gt;EmployeeSystemUserId &lt;span style="COLOR: blue"&gt;in &lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;( &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;SELECT &lt;/span&gt;ParamValues.EmployeeSystemUserId.value(&lt;span style="COLOR: maroon"&gt;'.'&lt;/span&gt;,&lt;span style="COLOR: maroon"&gt;'Int'&lt;/span&gt;) &lt;span style="COLOR: blue"&gt;as &lt;/span&gt;Id &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;    &lt;span style="COLOR: blue"&gt;FROM &lt;/span&gt;@EmployeeSystemUserIdList.nodes(&lt;span style="COLOR: maroon"&gt;'/EmployeeSystemUserId'&lt;/span&gt;) &lt;span style="COLOR: blue"&gt;as &lt;/span&gt;ParamValues(EmployeeSystemUserId) &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt;) &lt;/p&gt;
&lt;p style="MARGIN: 0px"&gt; &lt;/p&gt;
&lt;/div&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=116933"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=116933" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/joycsharp/aggbug/116933.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Mohammad Ashraful Alam</dc:creator>
            <guid>http://geekswithblogs.net/joycsharp/archive/2007/11/19/116933.aspx</guid>
            <pubDate>Mon, 19 Nov 2007 09:52:50 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/joycsharp/comments/116933.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/joycsharp/archive/2007/11/19/116933.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/joycsharp/comments/commentRss/116933.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/joycsharp/services/trackbacks/116933.aspx</trackback:ping>
        </item>
        <item>
            <title>Some Basic Differences Between ASP.NET 2.0 ObjectDataSource and SqlDataSource</title>
            <link>http://geekswithblogs.net/joycsharp/archive/2006/11/15/97221.aspx</link>
            <description>&lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Verdana" size="2"&gt;&lt;strong&gt;* Type Name&lt;br&gt;&lt;/strong&gt;For ObjectDataSource, the property TypeName includes the class name, that will responsible to manage data, this&amp;nbsp;may NOT be the data object collection. The select, insert etc methods will use the mentioned methods to access or retrieve data. For SqlDataSource, a built-in data collection is used, which can be bound to data data controls.&lt;br&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Verdana" size="2"&gt;&lt;strong&gt;* Connection String&lt;br&gt;&lt;/strong&gt;For ObjectDataSource, there is NO connection string needed, as it is used&amp;nbsp;middle tier. For SqlDataSource, connection string is needed.&lt;br&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Verdana" size="2"&gt;&lt;strong&gt;* CRUD Method&lt;br&gt;&lt;/strong&gt;For ObjectDataSource, there is NO method (select, insert etc) type, as the methods are being used from a class of middle tier. For SqlDataSource, there are two types of methods StoredProcedure and Text. note, in SqlDataSource, for parameters, in the execution time the system automatically includes a '@' before the name as specified in the name property.&lt;/font&gt;&lt;/p&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http://geekswithblogs.net/joycsharp/archive/2006/11/15/97221.aspx"&gt;&lt;img alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://geekswithblogs.net/joycsharp/archive/2006/11/15/97221.aspx" border="0"&gt;&lt;/a&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=97221"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=97221" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/joycsharp/aggbug/97221.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Mohammad Ashraful Alam [MVP]</dc:creator>
            <guid>http://geekswithblogs.net/joycsharp/archive/2006/11/15/97221.aspx</guid>
            <pubDate>Wed, 15 Nov 2006 16:59:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/joycsharp/comments/97221.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/joycsharp/archive/2006/11/15/97221.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/joycsharp/comments/commentRss/97221.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/joycsharp/services/trackbacks/97221.aspx</trackback:ping>
        </item>
        <item>
            <title>Concentration on Smarter Database Documentation</title>
            <link>http://geekswithblogs.net/joycsharp/archive/2006/10/18/94428.aspx</link>
            <description>&lt;p&gt;&lt;font face="Verdana" size="2"&gt;&lt;img height="142" src="http://www.fieldmuseum.org/peet_staph/nav_images/nav_bottom.jpg" width="137"&gt;&amp;nbsp; &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Verdana" size="2"&gt;I have been working in SQL Server 2000 for previous several years. Of course it's&amp;nbsp; a nice tool, where I can&amp;nbsp;compile the top level requirements to physical implementation&amp;nbsp;layer in much professional way. Well, as a developer, I have been faced a common problem in multiple projects, where I got confused while seeing the database diagram of an existing system, after a long time while I designed the database. Using database diagram, I can easily see the data fields, analyze the relations etc. But the problem is, since the attributes and relations are designed and shown in a technical manner, sometimes it becomes a bit tricky to match the top level requirements with the physical data model.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Verdana" size="2"&gt;For that reason, I needed a support in the server&amp;nbsp;tools set&amp;nbsp;for another level of documentation, which lies between the top level requirements documents and physical data model. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Verdana" size="2"&gt;[Top level requirement doc] -&amp;gt; &lt;strong&gt;[Readable documentation of physical db objects]&lt;/strong&gt; -&amp;gt; [Physical data model]&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Verdana" size="2"&gt;In this level each physical entities, attributes and relations will be explained in much human readable way,&amp;nbsp;&amp;nbsp;in short a support for description for database objects, which can easily be integrated, reused in technical way (i.e. support for navigation while clicking/pointing the object in the documentation, specific data logic (for instance how particular query will be achieved using attributes)&amp;nbsp;etc. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Verdana" size="2"&gt;Well, right now,&amp;nbsp;I am using MS Word, to describe entities, relations in very simple, but meaningful text and trying to discover a&amp;nbsp;better and smarter&amp;nbsp;structure&amp;nbsp;of database documentation in&amp;nbsp;the mentioned layer. &lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=94428"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=94428" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/joycsharp/aggbug/94428.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Mohammad Ashraful Alam</dc:creator>
            <guid>http://geekswithblogs.net/joycsharp/archive/2006/10/18/94428.aspx</guid>
            <pubDate>Wed, 18 Oct 2006 15:13:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/joycsharp/comments/94428.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/joycsharp/archive/2006/10/18/94428.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/joycsharp/comments/commentRss/94428.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/joycsharp/services/trackbacks/94428.aspx</trackback:ping>
        </item>
        <item>
            <title>LINQ – We can use intellisense on queries !!!</title>
            <link>http://geekswithblogs.net/joycsharp/archive/2006/07/20/85759.aspx</link>
            <description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;As a developer always we want to have the opportunity to write the codes properly, along with programming language specific words and keyword to be highlighted in to different colors. Also VS.NET developers enjoys an IDE features named &amp;#8220;Intellisense&amp;#8221;, where while wring codes, a list of probable class or object name appears in a list and can be inserted to the code segment, just by selecting the appropriate item from the list. This becomes EXTREMELY useful, when we have to use long class names (for code readability, which is very much necessary). &lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;While we invoke SQL statements from the &amp;#8220;coding&amp;#8221; layer, for instance using any .net ( ex. C# 3.0, VB.NET etc) language, we invoke a SQL statement, by using ADO.NET object model of .net framework, we really face a great problem now a days, since we have to write the SQL statements is string, where we can&amp;#8217;t get the keyword colors or can use the intellisense features. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;While invoking SQL statements into codes, personally I desired a language feature several times, where I can use the queries as language specific style. Yes, in the next version of C# programming language, there will be a new feature, named LINQ (Language Integrated Query), where we can invoke, debug and use the returned result of a database related query much more efficiently or effectively. &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;The code snippet below illustrates a very simple&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;example of LINQ used in a C# programming language environment&amp;#8230;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;[Title(&lt;SPAN style="COLOR: maroon"&gt;"Where - Simple 1"&lt;/SPAN&gt;)]&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;[Description(&lt;SPAN style="COLOR: maroon"&gt;"This sample illustrate a sample method that uses LINQ"&lt;/SPAN&gt;)]&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt; Linq1() {&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt;[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;var&lt;/SPAN&gt; lowNums =&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;from&lt;/SPAN&gt; n &lt;SPAN style="COLOR: blue"&gt;in&lt;/SPAN&gt; numbers&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;where&lt;/SPAN&gt; n &amp;lt; 5&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;select&lt;/SPAN&gt; n;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: teal"&gt;Console&lt;/SPAN&gt;.WriteLine(&lt;SPAN style="COLOR: maroon"&gt;"Numbers &amp;lt; 5:"&lt;/SPAN&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;foreach&lt;/SPAN&gt; (&lt;SPAN style="COLOR: blue"&gt;var&lt;/SPAN&gt; x &lt;SPAN style="COLOR: blue"&gt;in&lt;/SPAN&gt; lowNums) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: teal"&gt;Console&lt;/SPAN&gt;.WriteLine(x);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=85759"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=85759" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/joycsharp/aggbug/85759.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Mohammad Ashraful Alam</dc:creator>
            <guid>http://geekswithblogs.net/joycsharp/archive/2006/07/20/85759.aspx</guid>
            <pubDate>Thu, 20 Jul 2006 06:13:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/joycsharp/comments/85759.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/joycsharp/archive/2006/07/20/85759.aspx#feedback</comments>
            <slash:comments>4</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/joycsharp/comments/commentRss/85759.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/joycsharp/services/trackbacks/85759.aspx</trackback:ping>
        </item>
        <item>
            <title>“Instance Saver” Custom Entity Model- Basic Architecture</title>
            <link>http://geekswithblogs.net/joycsharp/archive/2006/07/10/84536.aspx</link>
            <description>&lt;P&gt;&lt;STRONG&gt;&lt;FONT face=Verdana size=2&gt;Business Entity: &lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;For each custom business entity, there is a collection class. However, if our tech platform is .net 2.0, we can use the generic list class for collections.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT face=Verdana size=2&gt;Business Layer:&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;1. Contains a &amp;#8220;Save&amp;#8221; instance method in business layer for insert and update operations.&lt;BR&gt;2. For delete and get operations, it uses static methods in the business layer.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT face=Verdana size=2&gt;Data Access Layer:&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Data access layer contains all CRUD operations in one class.&lt;BR&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=84536"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=84536" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/joycsharp/aggbug/84536.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Mohammad Ashraful Alam</dc:creator>
            <guid>http://geekswithblogs.net/joycsharp/archive/2006/07/10/84536.aspx</guid>
            <pubDate>Mon, 10 Jul 2006 02:09:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/joycsharp/comments/84536.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/joycsharp/archive/2006/07/10/84536.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/joycsharp/comments/commentRss/84536.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/joycsharp/services/trackbacks/84536.aspx</trackback:ping>
        </item>
    </channel>
</rss>