<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/"><channel><title>Commerce Starter Kit - ASP.NET 2.0 PayPal</title><link>http://davidhayden.com/blog/dave/category/46.aspx</link><description>&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Sample code, tutorials, and new providers that can be used to extend the new ASP.NET 2.0 and PayPal Commerce Starter Kit.&lt;/FONT&gt;&lt;/P&gt;</description><managingEditor>Dave Hayden</managingEditor><dc:language>en-US</dc:language><generator>.Text Version 0.95.2004.101</generator><item><dc:creator>Dave Hayden</dc:creator><title>Extending the ASP.NET 2.0 PayPal Commerce Starter Kit - ReferralProvider for Tracking Online Store Referrals</title><link>http://davidhayden.com/blog/dave/archive/2005/11/20/2577.aspx</link><pubDate>Sun, 20 Nov 2005 13:29:00 GMT</pubDate><guid>http://davidhayden.com/blog/dave/archive/2005/11/20/2577.aspx</guid><description>&lt;P&gt;&lt;FONT face=Verdana size=2&gt;The &lt;STRONG&gt;Commerce Starter Kit&lt;/STRONG&gt; ( &lt;/FONT&gt;&lt;A href="http://www.commercestarterkit.org/" target=_blank&gt;&lt;FONT face=Verdana size=2&gt;http://www.commercestarterkit.org/&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana size=2&gt;&amp;nbsp;) provides a simple and effective solution to sell items on the Internet. The online store supports PayPal, ASP.NET 2.0, and the new Provider Model&amp;nbsp;in the .NET 2.0 Framework.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Previously I created an &lt;STRONG&gt;InventoryProvider&lt;/STRONG&gt; for the &lt;STRONG&gt;Commerce Starter Kit&lt;/STRONG&gt; which you can read about in the following post:&lt;/FONT&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://davidhayden.com/blog/dave/archive/2005/11/13/2565.aspx"&gt;&lt;FONT face=Verdana color=#0000ff size=2&gt;Extending the ASP.NET 2.0 PayPal Commerce Starter Kit - InventoryProvider for Inventory Management&lt;/FONT&gt;&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Now I would like to talk about a &lt;STRONG&gt;ReferralProvider&lt;/STRONG&gt; for the &lt;STRONG&gt;Commerce Starter Kit&lt;/STRONG&gt;.&amp;nbsp; You can read all my posts on the &lt;STRONG&gt;Commerce Starter Kit&lt;/STRONG&gt; in the following category:&lt;/FONT&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://davidhayden.com/blog/dave/category/46.aspx"&gt;&lt;FONT face=Verdana size=2&gt;Commerce Starter Kit - ASP.NET 2.0 PayPal&lt;/FONT&gt;&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;&lt;FONT face=Verdana&gt;ReferralProvider for Tracking Online Store Referrals&lt;/FONT&gt;&lt;/H2&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;One of the features not included in the original design is a simple &lt;STRONG&gt;ReferralProvider&lt;/STRONG&gt; that tracks referrals to your online store.&amp;nbsp; As an online retailer you often want to know how people are finding your online store.&amp;nbsp; Is someone linking to your store or are they finding you via the search engines?&amp;nbsp; By tracking your online referrals you are able to answer these questions as well as make better decisions on how to market your online store.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P align=center&gt;&lt;FONT face=Verdana size=2&gt;&lt;IMG src="http://www.davidhayden.com/photos/csksolution.jpg"&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;&lt;FONT face=Verdana size=2&gt;Create an HttpModule - ReferralModule&lt;/FONT&gt;&lt;/H2&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;One of the ways you can track referrals to your website is by creating an &lt;STRONG&gt;HttpModule&lt;/STRONG&gt; that subscribes to the Global &lt;STRONG&gt;BeginRequest&lt;/STRONG&gt; Event.&amp;nbsp; This event is fired upon each HTTP Request to your website.&amp;nbsp; When you find a referral from another website, you can send the referring URL and the target URL to the &lt;STRONG&gt;ReferralManager&lt;/STRONG&gt; which will delegate the responsibility&amp;nbsp;of&amp;nbsp;inserting it to the proper provider ( in this case &lt;STRONG&gt;SqlReferralProvider&lt;/STRONG&gt; ).&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P align=center&gt;&lt;IMG src="http://www.davidhayden.com/photos/referralwebsite.jpg"&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;SPAN style="COLOR: #808080"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;&amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;
&lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt; Summary description for ReferralModule
&lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;&amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;
&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;public&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;class&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; ReferralModule : IHttpModule
{
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;public&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; ReferralModule()
    {
    }

    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;#region&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; IHttpModule Members&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;

    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;public&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;void&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; Dispose()
    {
    }

    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;public&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;void&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; Init(HttpApplication context)
    {
        context.BeginRequest &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;+=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;
            &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;new&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; EventHandler(context_BeginRequest);
    }

    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;#endregion&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;

    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;void&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; context_BeginRequest(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;object&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; sender, EventArgs e)
    {
        HttpApplication app &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; sender &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;as&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; HttpApplication;

        &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;if&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; (app.Context &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;==&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;null&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;)
            &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;return&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;;

        HttpContext context &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; app.Context;

        &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;if&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; (context.Request.UrlReferrer &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;==&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;null&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;||&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;
                &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;string&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;.IsNullOrEmpty(context.Request.
                UrlReferrer.ToString()))
            &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;return&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;;

        &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;if&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; (context.Request.UrlReferrer.Host.
                Equals(context.Request.Url.Host))
            &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;return&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;;

        ReferralManager.InsertReferral(context.Request.
            UrlReferrer.ToString(), context.Request.Url.
            ToString());
    }
}&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;&lt;FONT face=Verdana&gt;ReferralManager - Business Layer Manager Handling UI Requests&lt;/FONT&gt;&lt;/H2&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;The &lt;STRONG&gt;HttpModule&lt;/STRONG&gt; passes the request to the &lt;STRONG&gt;ReferralManager&lt;/STRONG&gt; that does nothing but&amp;nbsp;hand off the referral information to the &lt;STRONG&gt;ReferralProvider&lt;/STRONG&gt; registered in the &lt;STRONG&gt;Web.Config&lt;/STRONG&gt; file.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;SPAN style="COLOR: #808080"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;&amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;
&lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt; Summary description for ReferralManager
&lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;&amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;
&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;public&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;class&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; ReferralManager
{
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;&amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt; Gets all the referrals in the database
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;&amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;&amp;lt;returns&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;IDataReader&lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;&amp;lt;/returns&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;
&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;public&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;static&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; IDataReader GetReferrals()
    {
        &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;return&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; Commerce.Providers.ReferralProvider.
            Instance.GetReferrals();
    }

    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;&amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt; Insert a referral in the database
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;&amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;&amp;lt;param name="referringUrl"&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;From Url&lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;&amp;lt;/param&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;&amp;lt;param name="url"&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;To Url&lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;&amp;lt;/param&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;
&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;public&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;static&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;void&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; InsertReferral(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;string&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; referringUrl,
                                        &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;string&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; url)
    {
        Commerce.Providers.ReferralProvider.Instance.
            InsertReferral(referringUrl, url);
    }

    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;&amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt; Delete all referrals in the database
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;&amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;
&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;public&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;static&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;void&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; DeleteAll()
    {
        Commerce.Providers.ReferralProvider.Instance.
            DeleteAllReferrals();
    }

    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;&amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt; Delete all referrals in the database before a date.
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;&amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;&amp;lt;param name="referralDate"&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;Delete referrals&lt;/SPAN&gt;&lt;SPAN style="COLOR: #808080"&gt;
&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;            before &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;this&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; date.&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;param&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;public&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;static&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;void&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; DeleteBefore(DateTime referralDate)
    {
        Commerce.Providers.ReferralProvider.Instance.
            DeleteReferralsBefore(referralDate);
    }
}&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;&lt;FONT face=Verdana&gt;SqlReferralProvider - Concrete ReferralProvider Tracking Online Store Referrals&lt;/FONT&gt;&lt;/H2&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;The &lt;STRONG&gt;SqlReferralProvider&lt;/STRONG&gt;&amp;nbsp;stores and manages&amp;nbsp;the referral information&amp;nbsp;in a table, called &lt;STRONG&gt;CMRC_Referrals&lt;/STRONG&gt;, via a number of stored procedures.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P align=center&gt;&lt;FONT face=Verdana size=2&gt;&lt;IMG src="http://www.davidhayden.com/photos/referraltable.jpg"&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P align=center&gt;&lt;FONT face=Verdana size=2&gt;&lt;IMG src="http://www.davidhayden.com/photos/storedprocedure.jpg"&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;SqlReferralProvider&lt;/STRONG&gt; provides a &lt;STRONG&gt;Count&lt;/STRONG&gt; field that shows a rolling count of the number of referrals from a specific URL so that you can get some sort of idea as to the amount of traffic from a specific URL.&amp;nbsp; This allows you to identify your most active referrers.&amp;nbsp; This rolling count is handled in the &lt;STRONG&gt;Insert Stored Procedure&lt;/STRONG&gt; to keep database calls to a minimum.&amp;nbsp;&amp;nbsp;Below is a snippet of &lt;STRONG&gt;SqlReferralProvider&lt;/STRONG&gt; responsible for inserting the referral.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;As mentioned before, the &lt;STRONG&gt;Commerce Starter Kit&lt;/STRONG&gt; uses the&amp;nbsp;&lt;STRONG&gt;Data Access Application Block ( DAAB ) 2.0&lt;/STRONG&gt; to help with data access layer functionality.&amp;nbsp; Here I am calling the stored procedure, &lt;STRONG&gt;CMRC_REFERRALS_Insert&lt;/STRONG&gt;, with the referringURL and target URL.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;SPAN style="COLOR: #0000ff"&gt;public&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;override&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;void&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; InsertReferral
        (&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;string&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; referringUrl, &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;string&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; url)
{
    SqlParameter[] parameters &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;
        &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;new&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; SqlParameter[&lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;2&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;];

    SqlParameter referringUrlParameter &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;
        &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;new&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; SqlParameter(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;@ReferringUrl&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;,
        SqlDbType.VarChar, &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;255&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;);
    referringUrlParameter.Value &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; referringUrl;
    parameters[&lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;] &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; referringUrlParameter;

    SqlParameter urlParameter &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;
        &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;new&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; SqlParameter(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;@Url&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;, SqlDbType.VarChar,
        &lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;255&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;);
    urlParameter.Value &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; url;
    parameters[&lt;/SPAN&gt;&lt;SPAN style="COLOR: #ff0000"&gt;1&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;] &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt; urlParameter;

    SqlHelper.ExecuteNonQuery(_connectionString,
        CommandType.StoredProcedure,
        &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;CMRC_REFERRALS_Insert&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;, parameters);
}&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;&lt;FONT face=Verdana&gt;Conclusion&lt;/FONT&gt;&lt;/H2&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;The &lt;STRONG&gt;ReferralProvider&lt;/STRONG&gt; extension to the &lt;STRONG&gt;ASP.NET 2.0 and PayPal Commerce Starter Kit&lt;/STRONG&gt; provides a simple and effective solution for tracking referrals to your online store.&amp;nbsp; You can modify the existing code or create a new provider for your own online store.&amp;nbsp; Extremely busy stores will want to provide a more scalable solution that queues each request for insertion at a later time.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;You can download the source code &lt;A href="http://www.davidhayden.com/downloads/referralproviderproject.zip" target=_blank&gt;here&lt;/A&gt;.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;&lt;STRONG&gt;Written by&lt;/STRONG&gt; &lt;A href="http://www.davidhayden.com/"&gt;David Hayden&lt;/A&gt; ( &lt;A href="http://www.davidhayden.com/"&gt;ASP.NET Developer&lt;/A&gt;, &lt;A href="http://davidhayden.com/blog/dave/"&gt;Blog&lt;/A&gt; )&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;&lt;img src ="http://davidhayden.com/blog/dave/aggbug/2577.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Dave Hayden</dc:creator><title>Extending the ASP.NET 2.0 PayPal Commerce Starter Kit - InventoryProvider for Inventory Management</title><link>http://davidhayden.com/blog/dave/archive/2005/11/13/2565.aspx</link><pubDate>Sun, 13 Nov 2005 22:24:00 GMT</pubDate><guid>http://davidhayden.com/blog/dave/archive/2005/11/13/2565.aspx</guid><description>&lt;P&gt;&lt;FONT face=Verdana size=2&gt;I downloaded the &lt;/FONT&gt;&lt;A href="http://davidhayden.com/blog/dave/archive/2005/11/11/2563.aspx"&gt;&lt;FONT face=Verdana size=2&gt;ASP.NET 2.0 PayPal Commerce Starter Kit&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana size=2&gt; (CSK) Friday for kicks and ended up creating a new provider, called &lt;STRONG&gt;InventoryProvider&lt;/STRONG&gt;, that provides the basis for a more functional and feature-rich inventory management system.  I say "provides the basis," because my immediate intentions were to do the minimal amount of work possible to have CSK use the provider and then add new features in increments later.&lt;/FONT&gt;&lt;/P&gt;
&lt;H2&gt;&lt;FONT face=Verdana&gt;AmountOnHand&lt;/FONT&gt;&lt;/H2&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Currently, CSK fulfills its inventory management via an &lt;STRONG&gt;AmountOnHand&lt;/STRONG&gt; field in the &lt;STRONG&gt;Products&lt;/STRONG&gt; Table.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt; &lt;/P&gt;
&lt;P align=center&gt;&lt;IMG src="http://www.davidhayden.com/photos/producttable.jpg"&gt;&lt;/P&gt;
&lt;P&gt; &lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;This is fine for a starter kit and simple needs, but I thought I would provide the foundation for extending these needs a bit further using what exists today.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt; &lt;/P&gt;
&lt;H2&gt;&lt;FONT face=Verdana&gt;InventoryProvider&lt;/FONT&gt;&lt;/H2&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;CSK uses the &lt;STRONG&gt;Provider Model&lt;/STRONG&gt; to abstract the functionality needed by the website from the actual concrete classes that provide it.  It has providers to handle the product catalog, shopping cart, orders, tax calculations, etc.  I followed this model by creating an &lt;STRONG&gt;InventoryProvider&lt;/STRONG&gt; to provide functionality and features associated with Inventory Management.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt; &lt;/P&gt;
&lt;P align=center&gt;&lt;IMG src="http://www.davidhayden.com/photos/commercesolutionfile.jpg"&gt;&lt;/P&gt;
&lt;P&gt; &lt;/P&gt;
&lt;P&gt; &lt;/P&gt;
&lt;H2&gt;&lt;FONT face=Verdana&gt;Product Detail Page and Inventory Manager&lt;/FONT&gt;&lt;/H2&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;One of the places where CSK uses the &lt;STRONG&gt;AmountOnHand&lt;/STRONG&gt; field associated with a product is on the Product Detail Page where it decides if the &lt;STRONG&gt;Add To Cart&lt;/STRONG&gt; Link and &lt;STRONG&gt;Out of Stock&lt;/STRONG&gt; Label should be displayed.  I no longer want to access that information directly, but have the page call the &lt;STRONG&gt;InventoryManager&lt;/STRONG&gt; which is responsible for handling Inventory Management needs.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt; &lt;/P&gt;
&lt;P align=center&gt;&lt;IMG src="http://www.davidhayden.com/photos/productaspxcs.jpg"&gt;&lt;/P&gt;
&lt;P&gt; &lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;The &lt;STRONG&gt;InventoryManager&lt;/STRONG&gt; sits right with the other managers used by CSK.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt; &lt;/P&gt;
&lt;P align=center&gt;&lt;IMG src="http://www.davidhayden.com/photos/inventorymanager.jpg"&gt;&lt;/P&gt;
&lt;P&gt; &lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Here is a stripped down version of the &lt;STRONG&gt;InventoryManager&lt;/STRONG&gt; showing  you the functionality in question.  I am following the same style as the other manager classes in CSK:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt; &lt;/P&gt;&lt;PRE&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;public&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;class&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt; InventoryManager&lt;BR&gt;{&lt;BR&gt;&lt;BR&gt;    &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(128,128,128)"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,128,0)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(128,128,128)"&gt;&lt;SUMMARY&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,128,0)"&gt;
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(128,128,128)"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,128,0)"&gt; Get product quantity on hand&lt;BR&gt;    &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(128,128,128)"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,128,0)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(128,128,128)"&gt;&lt;/SUMMARY&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,128,0)"&gt;
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(128,128,128)"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,128,0)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(128,128,128)"&gt;&lt;PARAM name="productID"&gt;&lt;/PARAM&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,128,0)"&gt;
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(128,128,128)"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,128,0)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(128,128,128)"&gt;&lt;RETURNS&gt;&lt;/RETURNS&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(128,128,128)"&gt;
&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;    &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;public&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;static&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt; GetAmountOnHand(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt; productID)&lt;BR&gt;    {&lt;BR&gt;        &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;return&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt; Commerce.Providers.&lt;BR&gt;            InventoryProvider.Instance.&lt;BR&gt;                  GetQtyInStock(productID);&lt;BR&gt;    }&lt;BR&gt;}&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;P&gt; &lt;/P&gt;
&lt;H2&gt;&lt;FONT face=Verdana&gt;Simplest Thing Possible - ReUse Existing Functionality in CSK&lt;/FONT&gt;&lt;/H2&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Although my needs in the future will require a bit more functionality, I don't want to be bothered with that at this point.  I just need to get &lt;STRONG&gt;InventoryManager&lt;/STRONG&gt; integrated into the UI to abstract the idea of &lt;STRONG&gt;AmountOnHand&lt;/STRONG&gt; from &lt;STRONG&gt;Product&lt;/STRONG&gt; while still using the existing functionality.  Hence, I just stole the code from the &lt;STRONG&gt;SqlCatalogProvider&lt;/STRONG&gt; to load a product and return the value in the &lt;STRONG&gt;AmountOnHand&lt;/STRONG&gt; Field.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;I contributed about 4 lines of code below, which is the &lt;STRONG&gt;GetQtyInStock&lt;/STRONG&gt; method implemented in &lt;STRONG&gt;SqlInventoryProvider&lt;/STRONG&gt;.  Note that the code is far from optimized and just serves the near term.  As you can see, CSK uses the &lt;STRONG&gt;Microsoft Data Access Application Block&lt;/STRONG&gt; for its data access needs.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt; &lt;/P&gt;&lt;PRE&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;public&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;override&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt; GetQtyInStock(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt; productID)&lt;BR&gt;{&lt;BR&gt;    &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt; qtyInStock &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;0&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;;&lt;BR&gt;&lt;BR&gt;    SqlDataReader rdr &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;null&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;;&lt;BR&gt;    &lt;BR&gt;    &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,128,0)"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,128,0)"&gt;Define the parameters&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,128,0)"&gt;
&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;    SqlParameter[] paramArray &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;new&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt; SqlParameter[]&lt;BR&gt;    {&lt;BR&gt;        &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;new&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt; SqlParameter(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,128,128)"&gt;@ProductID&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;, SqlDbType.Int,&lt;BR&gt;            &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;0&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;, ParameterDirection.Input, &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;true&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;10&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(255,0,0)"&gt;0&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;,&lt;BR&gt;            &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;null&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;, DataRowVersion.Current, productID),&lt;BR&gt;    };&lt;BR&gt;    &lt;BR&gt;    &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;try&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;
    {
        &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,128,0)"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,128,0)"&gt;Fill the dataset using the connection&lt;BR&gt;        &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,128,0)"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,128,0)"&gt; string from the db base class&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,128,0)"&gt;
&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;        rdr &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt; Microsoft.ApplicationBlocks.Data.SqlHelper.&lt;BR&gt;              ExecuteReader (_connectionString, CommandType.&lt;BR&gt;              StoredProcedure, &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,128,128)"&gt;CMRC_PRODUCTS_Get&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;,&lt;BR&gt;              paramArray);&lt;BR&gt;            &lt;BR&gt;        &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;if&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt; (rdr.Read())&lt;BR&gt;        {&lt;BR&gt;            &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt; ordinal &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt; rdr.GetOrdinal(&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,128,128)"&gt;AmountOnHand&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;);&lt;BR&gt;            qtyInStock &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt; rdr.GetInt32(ordinal);&lt;BR&gt;        }&lt;BR&gt;    }&lt;BR&gt;    &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;catch&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt; (SqlException x)&lt;BR&gt;    {&lt;BR&gt;        &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;string&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt; sException &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,128,128)"&gt;Error Executing&lt;BR&gt;            CMRC_PRODUCTS_Get: \r\n&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;;&lt;BR&gt;        &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;foreach&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt; (SqlParameter p &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;in&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt; paramArray)&lt;BR&gt;        {&lt;BR&gt;            sException &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;+=&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt; p.ParameterName &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;+&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,128,128)"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;+&lt;BR&gt;               &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;p.Value &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;+&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,128,128)"&gt;\r\n&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;;&lt;BR&gt;        }&lt;BR&gt;        &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;throw&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;new&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt; Exception(sException, x);&lt;BR&gt;&lt;BR&gt;    }&lt;BR&gt;&lt;BR&gt;    &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;return&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt; qtyInStock;&lt;BR&gt;&lt;BR&gt;}&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;P&gt; &lt;/P&gt;
&lt;H2&gt;&lt;FONT face=Verdana&gt;Web.Config Provider Stuff&lt;/FONT&gt;&lt;/H2&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;With all &lt;STRONG&gt;Provider Model&lt;/STRONG&gt; implementations, you end up putting information into &lt;STRONG&gt;Web.Config&lt;/STRONG&gt; to create this pluggable environment.  I have no other needs than the basics.  I used the current providers in CSK as a template for the &lt;STRONG&gt;InventoryProvider&lt;/STRONG&gt;:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt; &lt;/P&gt;&lt;PRE&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;&lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;configSections&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;&lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;section name&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,128,128)"&gt;CommerceInventoryProvider&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;
    type&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,128,128)"&gt;Commerce.Providers.&lt;BR&gt;      InventoryProviderConfigurationHandler,&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;
&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;    Commerce.InventoryProvider&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,128,128)"&gt;/&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;
&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;    &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;&lt;/&lt; SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;configSections&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;
&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;&lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;CommerceInventoryProvider defaultProvider&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;=&lt;BR&gt;       &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,128,128)"&gt;SqlInventoryProvider&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;&lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;providers&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;
          &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;&lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;clear&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;/&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;
          &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;&lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;add name&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,128,128)"&gt;SqlInventoryProvider&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;
        type&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,128,128)"&gt;Commerce.Providers.SqlInventoryProvider,&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;
&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;        Commerce.InventoryProvider&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;"&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;        connectionStringName&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,128,128)"&gt;CommerceTemplate&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;/&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;
    &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;&lt;/&lt; SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;providers&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;
&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;&lt;/&lt; SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;CommerceInventoryProvider&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,0,0)"&gt;&gt;&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;P&gt; &lt;/P&gt;
&lt;H2&gt;&lt;FONT face=Verdana&gt;Conclusion&lt;/FONT&gt;&lt;/H2&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Hopefully this sheds some light on how easy it is to extend the &lt;/FONT&gt;&lt;A href="http://davidhayden.com/blog/dave/archive/2005/11/11/2563.aspx"&gt;&lt;FONT face=Verdana size=2&gt;ASP.NET 2.0 PayPal Commerce Starter Kit&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana size=2&gt;.  The &lt;STRONG&gt;InventoryProvider&lt;/STRONG&gt; mentioned in this article can be extended to provide quite a bit of additional functionality than the current implementation.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt; &lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Written by &lt;/FONT&gt;&lt;A href="http://www.davidhayden.com/"&gt;&lt;FONT face=Verdana size=2&gt;David Hayden&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana size=2&gt; ( &lt;/FONT&gt;&lt;A href="http://www.davidhayden.com/"&gt;&lt;FONT face=Verdana size=2&gt;.NET Developer&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana size=2&gt; / &lt;/FONT&gt;&lt;A href="http://davidhayden.com/blog/dave/"&gt;&lt;FONT face=Verdana size=2&gt;Blog&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana size=2&gt; )&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt; &lt;/P&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;img src ="http://davidhayden.com/blog/dave/aggbug/2565.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Dave Hayden</dc:creator><title>ASP.NET 2.0 Online Store Starter Kit - Commerce Starter Kit (CSK) with PayPal Support</title><link>http://davidhayden.com/blog/dave/archive/2005/11/11/2563.aspx</link><pubDate>Fri, 11 Nov 2005 11:32:00 GMT</pubDate><guid>http://davidhayden.com/blog/dave/archive/2005/11/11/2563.aspx</guid><description>&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Another ASP.NET 2.0 Starter Kit hits the scenes. This one is an online store starter kit that supports PayPal Website Payments Standard and Pro as the payment engine.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Looks as though it uses the Provider Model pretty heavily according to a forum message.  It uses SQL Server Express, but there are some SQL Server 2005 upsizer scripts if you don't want to use SQL Server Express.  I think I even see some CodeSmith templates in there to help with generating code for Microsoft DAAB and Stored Procedures.  By the way, all the source code is in &lt;STRONG&gt;C#&lt;/STRONG&gt; and I am sure they would love someone to port it to &lt;STRONG&gt;VB&lt;/STRONG&gt;.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;No better way to learn then looking through other people's code ;)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt; &lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Some marketing stuff from the website:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;&amp;#8220;The Commerce Starter Kit offers .NET developers of all skill levels the ability to create an e-commerce site quickly and efficiently. The project is built in C# and takes advantage of features of the Microsoft.NET Framework 2.0. It also supports PayPal Website Payments Standard and Pro as the payment engine. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;With this site, you can quickly get up to speed using all of these pre-built features:&lt;/FONT&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;Product catalog &amp; shopping cart&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;Product inventory and order Management&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;Credit card processing via PayPal Website&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;Payments Standard and Pro&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;Login and anonymous shopping&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;Simple shipping and sales tax&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;Customer purchase history&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;Usage logs &lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt; &lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Technical Requirements:&lt;/FONT&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;Visual Studio 2005&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;SQL Server 2005 Express&lt;/FONT&gt; 
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;PayPal Business account required for seller. Customers can purchase without a PayPal account&amp;#8220;&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt; &lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Learn more &lt;/FONT&gt;&lt;A href="http://www.commercestarterkit.org/" target=_blank&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;&lt;/FONT&gt; &lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Posted by &lt;A href="http://www.davidhayden.com/"&gt;David Hayden&lt;/A&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;&lt;/FONT&gt; &lt;/P&gt;&lt;img src ="http://davidhayden.com/blog/dave/aggbug/2563.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>