<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" version="2.0">
    <channel>
        <title>Brownie's Blog</title>
        <link>http://blog.brownie.com.au/Default.aspx</link>
        <description>Andrew Browne's .NET Blog</description>
        <language>en-AU</language>
        <copyright>Andrew Browne</copyright>
        <managingEditor>brownie@brownie.com.au</managingEditor>
        <generator>Subtext Version 1.9.5.177</generator>
        <image>
            <title>Brownie's Blog</title>
            <url>http://blog.brownie.com.au/images/RSS2Image.gif</url>
            <link>http://blog.brownie.com.au/Default.aspx</link>
            <width>77</width>
            <height>60</height>
        </image>
        <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/BrowniesBlog" type="application/rss+xml" /><item>
            <title>Announcing the CFlat compiler</title>
            <category>CFlat</category>
            <category>Compiler</category>
            <link>http://blog.brownie.com.au/archive/2009/06/17/announcing-the-cflat-compiler.aspx</link>
            <description>&lt;p&gt;While I have been backpacking through Europe my urge to code has not been completely ignored. On trains and planes and buses I have been working my way through “The Dragon Book” and “The Deﬁnitive ANTLR Reference”.&lt;/p&gt;
&lt;p&gt;As of a few minutes ago I am probably too proud of the fact that the command line:&lt;/p&gt;
&lt;pre&gt;cflat.exe SimpleTest.cflat -o SimpleTest.dll&lt;/pre&gt;
&lt;p&gt;Compiles this:&lt;/p&gt;
&lt;pre&gt;public class SimpleTest
{
    public int GetValue()
    {
        return 1;
    }

    public int Main()
    {
	int a = 2;
	if(true){
		return a + GetValue();
	}
	return a;
    }
}&lt;/pre&gt;
&lt;p&gt;into this:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.brownie.com.au/images/blog_brownie_com_au/WindowsLiveWriter/Announcingthecflatcompiler_114D5/SimpleTests_2.png"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="SimpleTests" border="0" alt="SimpleTests" width="504" height="302" src="http://blog.brownie.com.au/images/blog_brownie_com_au/WindowsLiveWriter/Announcingthecflatcompiler_114D5/SimpleTests_thumb.png" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;There is lots more to do but I finally feel like after much experimentation I am on track to having my own compiler for a very small subset of C#.&lt;/p&gt;
&lt;p&gt;I built a compiler once before for possibly my favorite university class: Programming Language Implementation. I became interested in compilers again after playing around with the first Oslo release and the combination of M/IntelliPad.&lt;/p&gt;
&lt;p&gt;Of course this compiler will never be of any use except as a learning tool for me.  Currently I am using ANTLR for parsing/lexing and Reflection.Emit to target the CLR.  Once I am happy with the feature set of my C# subset I am planning to look into other options for parsing including MGrammar and F#. Before that I am going to need to add at least one looping construct :-).&lt;/p&gt;
&lt;p&gt;All the source and test are available in my github &lt;a href="http://github.com/adbrowne/abcm/tree/master"&gt;repository&lt;/a&gt; in case anybody wants to follow along.&lt;/p&gt;&lt;img src="http://blog.brownie.com.au/aggbug/17.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/BrowniesBlog/~4/h67fKLugY5M" height="1" width="1"/&gt;</description>
            <dc:creator>Andrew Browne</dc:creator>
            <guid>http://blog.brownie.com.au/archive/2009/06/17/announcing-the-cflat-compiler.aspx</guid>
            <pubDate>Tue, 16 Jun 2009 17:59:39 GMT</pubDate>
            <wfw:comment>http://blog.brownie.com.au/comments/17.aspx</wfw:comment>
            <comments>http://blog.brownie.com.au/archive/2009/06/17/announcing-the-cflat-compiler.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blog.brownie.com.au/comments/commentRss/17.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Going to Europe</title>
            <link>http://blog.brownie.com.au/archive/2009/01/26/going-to-europe.aspx</link>
            <description>&lt;p&gt;I am heading off to Europe for the next six months.  If you would like to follow along I'll be putting up some posts and photos as we go on my &lt;a href="http://europe2009.brownie.com.au/"&gt;Europe Blog&lt;/a&gt;.  I am &lt;a href="http://europe2009.brownie.com.au/?p=51"&gt;taking a laptop&lt;/a&gt; and have a &lt;a href="http://stackoverflow.com/questions/461099/general-purpose-language-to-build-a-compiler-for"&gt;project in mind&lt;/a&gt; for any spare time I have.  Hopefully that means there will be some technical posts for this blog as well.&lt;/p&gt;&lt;img src="http://blog.brownie.com.au/aggbug/16.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/BrowniesBlog/~4/qLK3I_ydQzk" height="1" width="1"/&gt;</description>
            <dc:creator>Andrew Browne</dc:creator>
            <guid>http://blog.brownie.com.au/archive/2009/01/26/going-to-europe.aspx</guid>
            <pubDate>Sun, 25 Jan 2009 13:05:12 GMT</pubDate>
            <comments>http://blog.brownie.com.au/archive/2009/01/26/going-to-europe.aspx#feedback</comments>
            <wfw:commentRss>http://blog.brownie.com.au/comments/commentRss/16.aspx</wfw:commentRss>
        </item>
        <item>
            <title>What's your Circle of Interest?</title>
            <link>http://blog.brownie.com.au/archive/2008/05/19/whats-your-circle-of-interest.aspx</link>
            <description>&lt;p&gt;I've been pondering how to write this up for over a week now.  It started with &lt;a href="http://www.paulstovell.com/blog/whats-your-circle-of-interest"&gt;Paul Stovell&lt;/a&gt; and I was been tagged by &lt;a href="http://jonas.follesoe.no/PermaLink,guid,81670c50-120b-47ab-8d6e-7e0682965e52.aspx"&gt;Jonas Folleso&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;The idea is to visually divide technologies into &lt;em&gt;Core&lt;/em&gt;, &lt;em&gt;Non-Core&lt;/em&gt; and &lt;em&gt;I don't care&lt;/em&gt;.  Its probably something I should have done before now as I tend to want to know everything about everything which isn't very feasible.  &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.brownie.com.au/images/blog_brownie_com_au/WindowsLiveWriter/WhatsyourCircleofInterest_23AF/MyCircleOfInterest_2.jpg"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border="0" alt="MyCircleOfInterest" src="http://blog.brownie.com.au/images/blog_brownie_com_au/WindowsLiveWriter/WhatsyourCircleofInterest_23AF/MyCircleOfInterest_2.jpg" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;blockquote&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Andrew Core:&lt;/strong&gt; Some of these are fun some are for work. These are things I not only care about but work with regularly and have a reasonable proficiency in.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Andrew Non-Core: &lt;/strong&gt;These are things I care about but don't use all the time/haven't used enough.  Some of them I would like to push into my core circle when I find the time.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;I don't care:&lt;/strong&gt; There is really no "development" stuff in here. I think my java days are probably over but I still "care" a little.  There are some notably missing technologies like WCF and WF.  I didn't feel they belonged here but they also aren't things I care about (yet?).  Maybe I should have added fourth ring of "neutral" technologies?  I'll keep my life simple by omitting these things for now.&lt;/p&gt;
&lt;p&gt;I'd love to see a circle of interest from:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a href="http://grumpywookie.wordpress.com/"&gt;Chris O’Connor&lt;/a&gt; &lt;/li&gt;
    &lt;li&gt;&lt;a href="http://homercles.wordpress.com/"&gt;Chris Armstrong&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I've spent a bit of time chatting to both the Chrises about some of the things in my circles of interest over the last few weeks.&lt;/p&gt;&lt;img src="http://blog.brownie.com.au/aggbug/14.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/BrowniesBlog/~4/xwnQxOvu3S8" height="1" width="1"/&gt;</description>
            <dc:creator>Andrew Browne</dc:creator>
            <guid>http://blog.brownie.com.au/archive/2008/05/19/whats-your-circle-of-interest.aspx</guid>
            <pubDate>Mon, 19 May 2008 10:13:08 GMT</pubDate>
            <comments>http://blog.brownie.com.au/archive/2008/05/19/whats-your-circle-of-interest.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blog.brownie.com.au/comments/commentRss/14.aspx</wfw:commentRss>
        </item>
        <item>
            <title>CodeCampOz 2008</title>
            <link>http://blog.brownie.com.au/archive/2008/05/05/codecampoz-2008.aspx</link>
            <description>&lt;p align="center"&gt;&lt;a href="http://www.orthogonal.com.au/gallery/codecamp08/" target="_blank"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="192" alt="theatre_pan_medium" src="http://blog.brownie.com.au/images/blog_brownie_com_au/WindowsLiveWriter/CodeCampOZ_12E83/theatre_pan_medium_3.jpg" width="644" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;So there's nothing like a code camp to make me feel energised about what I do!  I remember feeling roughly the same way after CodeCampOz 2007.  Myself and a couple of hundred other programmers spent last weekend in Wagga Wagga talking about all things geeky. &lt;/p&gt;  &lt;p&gt;This year I drove up with &lt;a href="http://jonas.follesoe.no/PermaLink,guid,23a9dd62-cef8-4fee-998a-d97050bd690a.aspx" target="_blank"&gt;Jonas Folles&lt;/a&gt; who did an awesome talk demonstrating an interactive video application with Silverlight.  My other travelling companion was Ian Thomas who regulars on the AusDotNet mailing list will be familiar with.  Thanks to both of them for making the six hours there and back not only bearable but interesting and enjoyable.&lt;/p&gt;  &lt;p&gt;I really enjoyed all the sessions but the standouts for me where:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.paulstovell.com/blog/reactive-programming-with-synclinq"&gt;Reactive Programming with SyncLINQ&lt;/a&gt; by Paul Stovell &lt;/li&gt;    &lt;li&gt;The ORM smackdown with Adam Cogan and Justin King &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.solidq.com/oz/MentorDetail.aspx?Id=33"&gt;Fernando Guerrero&lt;/a&gt;'s talk on tuning database systems. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I also got a heap out of Jonas's &lt;a href="http://jonas.follesoe.no/PermaLink,guid,23a9dd62-cef8-4fee-998a-d97050bd690a.aspx" target="_blank"&gt;silverlight talk&lt;/a&gt; and Scott Berry's WPF business applications talk from looking at the way they use blend.  I've been doing some WPF bits and pieces over the past 12 months but have not been using Blend anywhere near as much as I should.  Although as Scott pointed out maybe its good to go through enough XAML pain to really know what is going on.  &lt;a href="http://blurg.wordpress.com/2008/04/15/countdown-gadget-update-v120/"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="161" alt="image" src="http://blog.brownie.com.au/images/blog_brownie_com_au/WindowsLiveWriter/CodeCampOZ_12E83/image_3.png" width="144" align="right" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;My free copy of Blend 2 is coming in 18 days!&lt;/p&gt;  &lt;p&gt;As is always the way with these things many of the most interesting content was to be had between sessions and at the pub.  It was also great to put a face to many names that I've seen in blog or on mailing lists.&lt;/p&gt;  &lt;p&gt;While I'm feeling inspired here is my list of tech goals for the next few months:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Get back to contributing to &lt;a href="http://code.google.com/p/codecampserver/" target="_blank"&gt;CodeCampServer&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Get involved in a side project that isn't web based (probably WPF?) &lt;/li&gt;    &lt;li&gt;Get a demo together for the Heros Happen &lt;a href="http://www.microsoft.com/australia/heroes/community.aspx" target="_blank"&gt;demo comp&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;Actually post something interesting on this blog every now and again. &lt;/li&gt;    &lt;li&gt;Get my MCTS (Web) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Thanks to &lt;a href="http://www.orthogonal.com.au/computers/blog/index.htm"&gt;Greg Keogh&lt;/a&gt; for permission to use the photo at the top of this entry.  The theatre looks a little bear so my guess is the photo might have been from early Sunday morning.&lt;/p&gt;&lt;img src="http://blog.brownie.com.au/aggbug/13.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/BrowniesBlog/~4/s6SI60LUo70" height="1" width="1"/&gt;</description>
            <dc:creator>Andrew Browne</dc:creator>
            <guid>http://blog.brownie.com.au/archive/2008/05/05/codecampoz-2008.aspx</guid>
            <pubDate>Mon, 05 May 2008 07:54:18 GMT</pubDate>
            <comments>http://blog.brownie.com.au/archive/2008/05/05/codecampoz-2008.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blog.brownie.com.au/comments/commentRss/13.aspx</wfw:commentRss>
        </item>
        <item>
            <title>DataReaders and Stored Procs - The List</title>
            <category>Brownie's Bikes</category>
            <category>Data Access</category>
            <link>http://blog.brownie.com.au/archive/2007/11/26/datareaders-and-stored-procs---the-list.aspx</link>
            <description>&lt;div class="blogStory"&gt;   &lt;p&gt;&lt;strong&gt;Me:&lt;/strong&gt; I'm going to write some example code to properly compare table adapters with my other options.&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;Marc:&lt;/strong&gt; But you already hate table adapters how are you going to be objective?&lt;/p&gt;    &lt;p&gt;&lt;em&gt;...a day later...&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;Me: &lt;/strong&gt;Okay I'll start with stored procedures and data readers, nothing can be less fun than that.&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;So I proceeded to have lots of fun implementing my web site data layer using data readers and stored procedures. &lt;/p&gt;  &lt;p&gt;To begin with I wanted to fill my GridView with some data. This is something I'm sure we've all done so many times. When I was first working with ASP.NET I begin with Scott Mitchell's &lt;a href="http://www.asp.net/learn/data-access/"&gt;data tutorials&lt;/a&gt;. These tutorial use dynamic SQL.  After lots of advice and help from the guys on the SQLDownUnder list I have eliminated any dynamic SQL from my stored procedure.  I think the result is nice and reasonably maintainable. This stored procedure has the following features that I find are usually requested in the systems I build:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Paging &lt;/li&gt;    &lt;li&gt;Sorting &lt;/li&gt;    &lt;li&gt;Searching &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;To do paging two queries are required one that returns the page of results and one that gets the total number of results.  I have chosen to make the total rows an output parameter for my stored procedure.  This has two advantages I can see.  The first advantage is that the where clause is repeated across both queries and this way they are in the same place for maintenance.  The second plus is that it allows a single database round trip to get the list.&lt;/p&gt;  &lt;p style="font-size: 10pt; background: white 0% 50%; margin: 0px; color: black; font-family: courier new; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial"&gt;&lt;span style="color: rgb(43,145,175)"&gt;    1&lt;/span&gt; &lt;span style="color: green"&gt;-- Author:    &lt;/span&gt;    &lt;span style="color: green"&gt;Andrew Browne&lt;/span&gt;&lt;/p&gt;  &lt;p style="font-size: 10pt; background: white 0% 50%; margin: 0px; color: black; font-family: courier new; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial"&gt;&lt;span style="color: rgb(43,145,175)"&gt;    2&lt;/span&gt; &lt;span style="color: green"&gt;-- Create date: 12 November 2007&lt;/span&gt;&lt;/p&gt;  &lt;p style="font-size: 10pt; background: white 0% 50%; margin: 0px; color: black; font-family: courier new; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial"&gt;&lt;span style="color: rgb(43,145,175)"&gt;    3&lt;/span&gt; &lt;span style="color: green"&gt;-- Description:    Retrieves a product list one &lt;/span&gt;&lt;/p&gt;  &lt;p style="font-size: 10pt; background: white 0% 50%; margin: 0px; color: black; font-family: courier new; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial"&gt;&lt;span style="color: rgb(43,145,175)"&gt;    4&lt;/span&gt; &lt;span style="color: green"&gt;-- &lt;/span&gt;            &lt;span style="color: green"&gt;page at a time&lt;/span&gt;&lt;/p&gt;  &lt;p style="font-size: 10pt; background: white 0% 50%; margin: 0px; color: black; font-family: courier new; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial"&gt;&lt;span style="color: rgb(43,145,175)"&gt;    5&lt;/span&gt; &lt;span style="color: green"&gt;-- =============================================&lt;/span&gt;&lt;/p&gt;  &lt;p style="font-size: 10pt; background: white 0% 50%; margin: 0px; color: black; font-family: courier new; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial"&gt;&lt;span style="color: rgb(43,145,175)"&gt;    6&lt;/span&gt; &lt;span style="color: blue"&gt;CREATE PROCEDURE &lt;/span&gt;[BrowniesBikes].[GetProductList]&lt;/p&gt;  &lt;p style="font-size: 10pt; background: white 0% 50%; margin: 0px; color: black; font-family: courier new; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial"&gt;&lt;span style="color: rgb(43,145,175)"&gt;    7&lt;/span&gt;     @SearchString &lt;span style="color: blue"&gt;NVARCHAR&lt;/span&gt;(50) = &lt;span style="color: rgb(163,21,21)"&gt;''&lt;/span&gt;,&lt;/p&gt;  &lt;p style="font-size: 10pt; background: white 0% 50%; margin: 0px; color: black; font-family: courier new; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial"&gt;&lt;span style="color: rgb(43,145,175)"&gt;    8&lt;/span&gt;     @StartRow &lt;span style="color: blue"&gt;INT &lt;/span&gt;= 1,&lt;/p&gt;  &lt;p style="font-size: 10pt; background: white 0% 50%; margin: 0px; color: black; font-family: courier new; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial"&gt;&lt;span style="color: rgb(43,145,175)"&gt;    9&lt;/span&gt;     @EndRow &lt;span style="color: blue"&gt;INT &lt;/span&gt;= 10,&lt;/p&gt;  &lt;p style="font-size: 10pt; background: white 0% 50%; margin: 0px; color: black; font-family: courier new; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial"&gt;&lt;span style="color: rgb(43,145,175)"&gt;   10&lt;/span&gt;     @SortColumn &lt;span style="color: blue"&gt;NVARCHAR&lt;/span&gt;(50) = &lt;span style="color: rgb(163,21,21)"&gt;''&lt;/span&gt;,&lt;/p&gt;  &lt;p style="font-size: 10pt; background: white 0% 50%; margin: 0px; color: black; font-family: courier new; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial"&gt;&lt;span style="color: rgb(43,145,175)"&gt;   11&lt;/span&gt;     @TotalProducts &lt;span style="color: blue"&gt;INT OUTPUT&lt;/span&gt;&lt;/p&gt;  &lt;p style="font-size: 10pt; background: white 0% 50%; margin: 0px; color: black; font-family: courier new; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial"&gt;&lt;span style="color: rgb(43,145,175)"&gt;   12&lt;/span&gt; &lt;span style="color: blue"&gt;AS&lt;/span&gt;&lt;/p&gt;  &lt;p style="font-size: 10pt; background: white 0% 50%; margin: 0px; color: black; font-family: courier new; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial"&gt;&lt;span style="color: rgb(43,145,175)"&gt;   13&lt;/span&gt; &lt;span style="color: blue"&gt;BEGIN&lt;/span&gt;&lt;/p&gt;  &lt;p style="font-size: 10pt; background: white 0% 50%; margin: 0px; color: black; font-family: courier new; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial"&gt;&lt;span style="color: rgb(43,145,175)"&gt;   14&lt;/span&gt;     &lt;span style="color: blue"&gt;SET NOCOUNT ON&lt;/span&gt;;&lt;/p&gt;  &lt;p style="font-size: 10pt; background: white 0% 50%; margin: 0px; color: black; font-family: courier new; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial"&gt;&lt;span style="color: rgb(43,145,175)"&gt;   15&lt;/span&gt; &lt;/p&gt;  &lt;p style="font-size: 10pt; background: white 0% 50%; margin: 0px; color: black; font-family: courier new; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial"&gt;&lt;span style="color: rgb(43,145,175)"&gt;   16&lt;/span&gt;     &lt;span style="color: blue"&gt;DECLARE &lt;/span&gt;@LIKE_SEARCH &lt;span style="color: blue"&gt;as nvarchar&lt;/span&gt;(50) &lt;/p&gt;  &lt;p style="font-size: 10pt; background: white 0% 50%; margin: 0px; color: black; font-family: courier new; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial"&gt;&lt;span style="color: rgb(43,145,175)"&gt;   17&lt;/span&gt;     &lt;span style="color: blue"&gt;SET &lt;/span&gt;@LIKE_SEARCH = &lt;span style="color: rgb(163,21,21)"&gt;'%' &lt;/span&gt;+ &lt;span style="color: blue"&gt;lower&lt;/span&gt;(@SearchString) + &lt;span style="color: rgb(163,21,21)"&gt;'%'&lt;/span&gt;&lt;/p&gt;  &lt;p style="font-size: 10pt; background: white 0% 50%; margin: 0px; color: black; font-family: courier new; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial"&gt;&lt;span style="color: rgb(43,145,175)"&gt;   18&lt;/span&gt; &lt;/p&gt;  &lt;p style="font-size: 10pt; background: white 0% 50%; margin: 0px; color: black; font-family: courier new; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial"&gt;&lt;span style="color: rgb(43,145,175)"&gt;   19&lt;/span&gt;     &lt;span style="color: blue"&gt;SELECT &lt;/span&gt;@TotalProducts = &lt;span style="color: blue"&gt;COUNT&lt;/span&gt;(*) &lt;/p&gt;  &lt;p style="font-size: 10pt; background: white 0% 50%; margin: 0px; color: black; font-family: courier new; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial"&gt;&lt;span style="color: rgb(43,145,175)"&gt;   20&lt;/span&gt;         &lt;span style="color: blue"&gt;FROM &lt;/span&gt;Production.Product &lt;/p&gt;  &lt;p style="font-size: 10pt; background: white 0% 50%; margin: 0px; color: black; font-family: courier new; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial"&gt;&lt;span style="color: rgb(43,145,175)"&gt;   21&lt;/span&gt;         &lt;span style="color: blue"&gt;WHERE&lt;/span&gt;(&lt;span style="color: blue"&gt;lower&lt;/span&gt;(&lt;span style="color: blue"&gt;Name&lt;/span&gt;) &lt;span style="color: blue"&gt;LIKE &lt;/span&gt;@LIKE_SEARCH &lt;/p&gt;  &lt;p style="font-size: 10pt; background: white 0% 50%; margin: 0px; color: black; font-family: courier new; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial"&gt;&lt;span style="color: rgb(43,145,175)"&gt;   22&lt;/span&gt;             &lt;span style="color: blue"&gt;OR lower&lt;/span&gt;(ProductNumber) &lt;span style="color: blue"&gt;LIKE &lt;/span&gt;@LIKE_SEARCH)&lt;/p&gt;  &lt;p style="font-size: 10pt; background: white 0% 50%; margin: 0px; color: black; font-family: courier new; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial"&gt;&lt;span style="color: rgb(43,145,175)"&gt;   23&lt;/span&gt; &lt;/p&gt;  &lt;p style="font-size: 10pt; background: white 0% 50%; margin: 0px; color: black; font-family: courier new; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial"&gt;&lt;span style="color: rgb(43,145,175)"&gt;   24&lt;/span&gt;     &lt;span style="color: blue"&gt;SELECT &lt;/span&gt;RowRank, ProductID, &lt;span style="color: blue"&gt;Name&lt;/span&gt;, ProductNumber &lt;/p&gt;  &lt;p style="font-size: 10pt; background: white 0% 50%; margin: 0px; color: black; font-family: courier new; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial"&gt;&lt;span style="color: rgb(43,145,175)"&gt;   25&lt;/span&gt;         &lt;span style="color: blue"&gt;FROM &lt;/span&gt;&lt;/p&gt;  &lt;p style="font-size: 10pt; background: white 0% 50%; margin: 0px; color: black; font-family: courier new; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial"&gt;&lt;span style="color: rgb(43,145,175)"&gt;   26&lt;/span&gt;         (&lt;span style="color: blue"&gt;SELECT &lt;/span&gt;ProductID, &lt;/p&gt;  &lt;p style="font-size: 10pt; background: white 0% 50%; margin: 0px; color: black; font-family: courier new; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial"&gt;&lt;span style="color: rgb(43,145,175)"&gt;   27&lt;/span&gt;             &lt;span style="color: blue"&gt;Name&lt;/span&gt;, &lt;/p&gt;  &lt;p style="font-size: 10pt; background: white 0% 50%; margin: 0px; color: black; font-family: courier new; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial"&gt;&lt;span style="color: rgb(43,145,175)"&gt;   28&lt;/span&gt;             ProductNumber, &lt;/p&gt;  &lt;p style="font-size: 10pt; background: white 0% 50%; margin: 0px; color: black; font-family: courier new; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial"&gt;&lt;span style="color: rgb(43,145,175)"&gt;   29&lt;/span&gt;             ROW_NUMBER() &lt;/p&gt;  &lt;p style="font-size: 10pt; background: white 0% 50%; margin: 0px; color: black; font-family: courier new; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial"&gt;&lt;span style="color: rgb(43,145,175)"&gt;   30&lt;/span&gt;             &lt;span style="color: blue"&gt;OVER&lt;/span&gt;(&lt;/p&gt;  &lt;p style="font-size: 10pt; background: white 0% 50%; margin: 0px; color: black; font-family: courier new; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial"&gt;&lt;span style="color: rgb(43,145,175)"&gt;   31&lt;/span&gt;                 &lt;span style="color: blue"&gt;ORDER BY &lt;/span&gt;&lt;/p&gt;  &lt;p style="font-size: 10pt; background: white 0% 50%; margin: 0px; color: black; font-family: courier new; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial"&gt;&lt;span style="color: rgb(43,145,175)"&gt;   32&lt;/span&gt;                     &lt;span style="color: blue"&gt;CASE WHEN &lt;/span&gt;&lt;/p&gt;  &lt;p style="font-size: 10pt; background: white 0% 50%; margin: 0px; color: black; font-family: courier new; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial"&gt;&lt;span style="color: rgb(43,145,175)"&gt;   33&lt;/span&gt;                         @SortColumn = &lt;span style="color: rgb(163,21,21)"&gt;'ProductNumber' &lt;/span&gt;&lt;/p&gt;  &lt;p style="font-size: 10pt; background: white 0% 50%; margin: 0px; color: black; font-family: courier new; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial"&gt;&lt;span style="color: rgb(43,145,175)"&gt;   34&lt;/span&gt;                     &lt;span style="color: blue"&gt;THEN &lt;/span&gt;&lt;/p&gt;  &lt;p style="font-size: 10pt; background: white 0% 50%; margin: 0px; color: black; font-family: courier new; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial"&gt;&lt;span style="color: rgb(43,145,175)"&gt;   35&lt;/span&gt;                         ProductNumber&lt;/p&gt;  &lt;p style="font-size: 10pt; background: white 0% 50%; margin: 0px; color: black; font-family: courier new; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial"&gt;&lt;span style="color: rgb(43,145,175)"&gt;   36&lt;/span&gt;                     &lt;span style="color: blue"&gt;ELSE &lt;/span&gt;&lt;/p&gt;  &lt;p style="font-size: 10pt; background: white 0% 50%; margin: 0px; color: black; font-family: courier new; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial"&gt;&lt;span style="color: rgb(43,145,175)"&gt;   37&lt;/span&gt;                         &lt;span style="color: blue"&gt;Name&lt;/span&gt;&lt;/p&gt;  &lt;p style="font-size: 10pt; background: white 0% 50%; margin: 0px; color: black; font-family: courier new; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial"&gt;&lt;span style="color: rgb(43,145,175)"&gt;   38&lt;/span&gt;                     &lt;span style="color: blue"&gt;END&lt;/span&gt;&lt;/p&gt;  &lt;p style="font-size: 10pt; background: white 0% 50%; margin: 0px; color: black; font-family: courier new; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial"&gt;&lt;span style="color: rgb(43,145,175)"&gt;   39&lt;/span&gt;                 ) &lt;/p&gt;  &lt;p style="font-size: 10pt; background: white 0% 50%; margin: 0px; color: black; font-family: courier new; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial"&gt;&lt;span style="color: rgb(43,145,175)"&gt;   40&lt;/span&gt;         &lt;span style="color: blue"&gt;AS &lt;/span&gt;RowRank &lt;span style="color: blue"&gt;FROM &lt;/span&gt;Production.Product &lt;/p&gt;  &lt;p style="font-size: 10pt; background: white 0% 50%; margin: 0px; color: black; font-family: courier new; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial"&gt;&lt;span style="color: rgb(43,145,175)"&gt;   41&lt;/span&gt;         &lt;span style="color: blue"&gt;WHERE&lt;/span&gt;(&lt;span style="color: blue"&gt;lower&lt;/span&gt;(&lt;span style="color: blue"&gt;Name&lt;/span&gt;) &lt;span style="color: blue"&gt;LIKE &lt;/span&gt;@LIKE_SEARCH &lt;span style="color: blue"&gt;OR &lt;/span&gt;&lt;/p&gt;  &lt;p style="font-size: 10pt; background: white 0% 50%; margin: 0px; color: black; font-family: courier new; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial"&gt;&lt;span style="color: rgb(43,145,175)"&gt;   42&lt;/span&gt;             &lt;span style="color: blue"&gt;lower&lt;/span&gt;(ProductNumber) &lt;span style="color: blue"&gt;LIKE &lt;/span&gt;@LIKE_SEARCH)&lt;/p&gt;  &lt;p style="font-size: 10pt; background: white 0% 50%; margin: 0px; color: black; font-family: courier new; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial"&gt;&lt;span style="color: rgb(43,145,175)"&gt;   43&lt;/span&gt;         ) &lt;span style="color: blue"&gt;AS &lt;/span&gt;ProductsWithRowNumber &lt;/p&gt;  &lt;p style="font-size: 10pt; background: white 0% 50%; margin: 0px; color: black; font-family: courier new; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial"&gt;&lt;span style="color: rgb(43,145,175)"&gt;   44&lt;/span&gt;         &lt;span style="color: blue"&gt;WHERE &lt;/span&gt;RowRank &amp;gt; @StartRow &lt;/p&gt;  &lt;p style="font-size: 10pt; background: white 0% 50%; margin: 0px; color: black; font-family: courier new; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial"&gt;&lt;span style="color: rgb(43,145,175)"&gt;   45&lt;/span&gt;             &lt;span style="color: blue"&gt;AND &lt;/span&gt;RowRank &amp;lt;= @EndRow&lt;/p&gt;  &lt;p style="font-size: 10pt; background: white 0% 50%; margin: 0px; color: black; font-family: courier new; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial"&gt;&lt;span style="color: rgb(43,145,175)"&gt;   46&lt;/span&gt; &lt;span style="color: blue"&gt;END &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;This stored procedure will only work with SQL 2005 because of the over clause.&lt;/p&gt;  &lt;p&gt;The code to retrieve this was fairly straight forward if you want all the details grab the source code.  The main pain point that I found was this routine for manually mapping the results from the reader:&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: #2b91af"&gt;   78&lt;/span&gt;         &lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;static&lt;/span&gt; Product &lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   79&lt;/span&gt;             GetProductSummaryFromReader(&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   80&lt;/span&gt;                 IDataReader reader&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   81&lt;/span&gt;             )&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   82&lt;/span&gt;         {&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   83&lt;/span&gt;             Product product = &lt;span style="color: blue"&gt;new&lt;/span&gt; Product();&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   84&lt;/span&gt;             product.ProductID = &lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   85&lt;/span&gt;                 Convert.ToInt32(reader[&lt;span style="color: #a31515"&gt;"ProductId"&lt;/span&gt;]);&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   86&lt;/span&gt;             product.Name = &lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   87&lt;/span&gt;                 Convert.ToString(reader[&lt;span style="color: #a31515"&gt;"Name"&lt;/span&gt;]);&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   88&lt;/span&gt;             product.ProductNumber = &lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   89&lt;/span&gt;                 Convert.ToString(&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   90&lt;/span&gt;                     reader[&lt;span style="color: #a31515"&gt;"ProductNumber"&lt;/span&gt;]&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   91&lt;/span&gt;                     );&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   92&lt;/span&gt;             &lt;span style="color: blue"&gt;return&lt;/span&gt; product;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   93&lt;/span&gt;         }&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;This code feels a little fragile with all the convert calls in there but at least it's all in one place.&lt;/p&gt;&lt;img src="http://blog.brownie.com.au/aggbug/12.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/BrowniesBlog/~4/0LnH6PXNL2Q" height="1" width="1"/&gt;</description>
            <dc:creator>Andrew Browne</dc:creator>
            <guid>http://blog.brownie.com.au/archive/2007/11/26/datareaders-and-stored-procs---the-list.aspx</guid>
            <pubDate>Sun, 25 Nov 2007 23:25:54 GMT</pubDate>
            <comments>http://blog.brownie.com.au/archive/2007/11/26/datareaders-and-stored-procs---the-list.aspx#feedback</comments>
            <wfw:commentRss>http://blog.brownie.com.au/comments/commentRss/12.aspx</wfw:commentRss>
        </item>
        <item>
            <title>In Search of the Ultimate Data Access Layer - Summary</title>
            <category>Brownie's Bikes</category>
            <category>Data Access</category>
            <link>http://blog.brownie.com.au/archive/2008/01/05/in-search-of-the-ultimate-data-access-layer---summary.aspx</link>
            <description>&lt;p&gt;This post will serve as a summary of my posts related to my not very scientific analysis of data access layers.  These posts won't be tutorials but more pointers to things I liked/didn't like about each method as well as the main bits of interesting code.  &lt;/p&gt;
&lt;p&gt;For more detail grab the code from: &lt;a href="http://code.google.com/p/browniesbikes/"&gt;http://code.google.com/p/browniesbikes/&lt;/a&gt;.  Along with the code is also my NUnit tests.&lt;/p&gt;
&lt;h3&gt;DataReaders and Stored Procs:&lt;/h3&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a href="http://blog.brownie.com.au/archive/2007/11/26/data-readers-and-stored-procs.aspx"&gt;Listing Data&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;Retrieving a single item - implemented post coming soon&lt;/li&gt;
    &lt;li&gt;Inserting Data - implemented post coming soon&lt;/li&gt;
    &lt;li&gt;Updating Data - implemented post coming soon&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;TableAdapters:&lt;/h3&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a href="http://blog.brownie.com.au/archive/2008/01/05/tableadapters---the-list.aspx"&gt;Listing Data&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;Retrieving a single item - implemented post coming soon&lt;/li&gt;
    &lt;li&gt;Inserting Data - implemented post coming soon&lt;/li&gt;
    &lt;li&gt;Updating Data - implemented post coming soon&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;NHibernate:&lt;/h3&gt;
&lt;ul&gt;
    &lt;li&gt;Implemented - posts coming soon&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;LinqToSQL&lt;/h3&gt;
&lt;ul&gt;
    &lt;li&gt;Implemented - posts coming soon&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;SubSonic&lt;/h3&gt;
&lt;ul&gt;
    &lt;li&gt;partially implemented&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Data Access Application Block (Enterprise Library)&lt;/h3&gt;
&lt;ul&gt;
    &lt;li&gt;meaning to implement it someday.&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://blog.brownie.com.au/aggbug/11.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/BrowniesBlog/~4/30w32H3gmcM" height="1" width="1"/&gt;</description>
            <dc:creator>Andrew Browne</dc:creator>
            <guid>http://blog.brownie.com.au/archive/2008/01/05/in-search-of-the-ultimate-data-access-layer---summary.aspx</guid>
            <pubDate>Sat, 05 Jan 2008 09:43:54 GMT</pubDate>
            <comments>http://blog.brownie.com.au/archive/2008/01/05/in-search-of-the-ultimate-data-access-layer---summary.aspx#feedback</comments>
            <wfw:commentRss>http://blog.brownie.com.au/comments/commentRss/11.aspx</wfw:commentRss>
        </item>
        <item>
            <title>TableAdapters - The List</title>
            <category>Brownie's Bikes</category>
            <category>Data Access</category>
            <link>http://blog.brownie.com.au/archive/2008/01/05/tableadapters---the-list.aspx</link>
            <description>&lt;p&gt;Most of my post on retrieving my Product list focused on the Stored Procedure.  When it came time to implement the same list with a TableAdapter all that work was already done for me.  My steps became:&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;New dataset. &lt;/li&gt;
    &lt;li&gt;Drag my stored procedure from server explorer. &lt;/li&gt;
    &lt;li&gt;Rename the table and tableadapter &lt;/li&gt;
    &lt;li&gt;And there we have it: &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a href="http://blog.brownie.com.au/images/blog_brownie_com_au/WindowsLiveWriter/TableAdaptersTheList_11DCB/image_2.png"&gt;&lt;img width="244" height="122" border="0" src="http://blog.brownie.com.au/images/blog_brownie_com_au/WindowsLiveWriter/TableAdaptersTheList_11DCB/image_thumb.png" alt="image" style="border-width: 0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;I then double clicked on the designer and edited the codebehind file to allow my DataRows to implement my IProduct interface:&lt;/p&gt;
&lt;div style="background: white none repeat scroll 0%; font-size: 10pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: black; font-family: courier new;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;    1&lt;/span&gt; &lt;span style="color: blue;"&gt;using&lt;/span&gt; System;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;    2&lt;/span&gt; &lt;span style="color: blue;"&gt;using&lt;/span&gt; BrowniesBikes.DTO;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;    3&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;    4&lt;/span&gt; &lt;span style="color: blue;"&gt;namespace&lt;/span&gt; BrowniesBikes.Data.TableAdapter {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;    5&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;    6&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;    7&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: rgb(43, 145, 175);"&gt;ProductDS&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;    8&lt;/span&gt;     {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;    9&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: rgb(43, 145, 175);"&gt;ProductListRow&lt;/span&gt; : &lt;span style="color: rgb(43, 145, 175);"&gt;IProduct&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;   10&lt;/span&gt;         {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;   11&lt;/span&gt; &lt;span style="color: blue;"&gt;            #region&lt;/span&gt; IProduct Members&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;   12&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;   13&lt;/span&gt;             &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt;? PhotoID&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;   14&lt;/span&gt;             {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;   15&lt;/span&gt;                 &lt;span style="color: blue;"&gt;get&lt;/span&gt; { &lt;span style="color: blue;"&gt;throw&lt;/span&gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; System.&lt;span style="color: rgb(43, 145, 175);"&gt;NotImplementedException&lt;/span&gt;(); }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;   16&lt;/span&gt;                 &lt;span style="color: blue;"&gt;set&lt;/span&gt; { &lt;span style="color: blue;"&gt;throw&lt;/span&gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; System.&lt;span style="color: rgb(43, 145, 175);"&gt;NotImplementedException&lt;/span&gt;(); }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;   17&lt;/span&gt;             }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;   18&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;   19&lt;/span&gt;             ...etc...&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;   20&lt;/span&gt; &lt;span style="color: blue;"&gt;            #endregion&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;   21&lt;/span&gt;         }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;   22&lt;/span&gt;     }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;   23&lt;/span&gt; }&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;My DAL class ended up with very little code:&lt;/p&gt;
&lt;div style="background: white none repeat scroll 0%; font-size: 10pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: black; font-family: courier new;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;   18&lt;/span&gt;         &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span style="color: rgb(43, 145, 175);"&gt;IProduct&lt;/span&gt;&amp;gt; GetProductList(&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;   19&lt;/span&gt;             &lt;span style="color: blue;"&gt;string&lt;/span&gt; searchString, &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;   20&lt;/span&gt;             &lt;span style="color: blue;"&gt;string&lt;/span&gt; sortExpression, &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;   21&lt;/span&gt;             &lt;span style="color: blue;"&gt;int&lt;/span&gt; startRow, &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;   22&lt;/span&gt;             &lt;span style="color: blue;"&gt;int&lt;/span&gt; maxRows)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;   23&lt;/span&gt;         {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;   24&lt;/span&gt;             &lt;span style="color: blue;"&gt;int&lt;/span&gt; endRow = startRow + maxRows;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;   25&lt;/span&gt;             &lt;span style="color: rgb(43, 145, 175);"&gt;ProductListTableAdapter&lt;/span&gt; productListTableAdapter = &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;   26&lt;/span&gt;                 &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;ProductListTableAdapter&lt;/span&gt;();&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;   27&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;   28&lt;/span&gt;             &lt;span style="color: blue;"&gt;int&lt;/span&gt;? totalProducts = 0;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;   29&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;   30&lt;/span&gt;             &lt;span style="color: rgb(43, 145, 175);"&gt;ProductDS&lt;/span&gt;.&lt;span style="color: rgb(43, 145, 175);"&gt;ProductListDataTable&lt;/span&gt; listDataTable = &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;   31&lt;/span&gt;                 productListTableAdapter.GetData(&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;   32&lt;/span&gt;                 searchString, &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;   33&lt;/span&gt;                 startRow, &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;   34&lt;/span&gt;                 endRow, &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;   35&lt;/span&gt;                 sortExpression, &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;   36&lt;/span&gt;                 &lt;span style="color: blue;"&gt;ref&lt;/span&gt; totalProducts); &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;   37&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;   38&lt;/span&gt;             &lt;span style="color: blue;"&gt;foreach&lt;/span&gt; (&lt;span style="color: rgb(43, 145, 175);"&gt;ProductDS&lt;/span&gt;.&lt;span style="color: rgb(43, 145, 175);"&gt;ProductListRow&lt;/span&gt; row &lt;span style="color: blue;"&gt;in&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;   39&lt;/span&gt;                 listDataTable.Rows)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;   40&lt;/span&gt;             {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;   41&lt;/span&gt;                 &lt;span style="color: blue;"&gt;yield&lt;/span&gt; &lt;span style="color: blue;"&gt;return&lt;/span&gt; row;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;   42&lt;/span&gt;             }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;   43&lt;/span&gt;         }&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Deceptively easy. Keep an eye out for my post on inserting and updating as well as TableAdapter maintenance. There are some major pain points coming your way.&lt;/p&gt;&lt;img src="http://blog.brownie.com.au/aggbug/10.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/BrowniesBlog/~4/bXw0YnOUHQU" height="1" width="1"/&gt;</description>
            <dc:creator>Andrew Browne</dc:creator>
            <guid>http://blog.brownie.com.au/archive/2008/01/05/tableadapters---the-list.aspx</guid>
            <pubDate>Sat, 05 Jan 2008 09:19:25 GMT</pubDate>
            <comments>http://blog.brownie.com.au/archive/2008/01/05/tableadapters---the-list.aspx#feedback</comments>
            <wfw:commentRss>http://blog.brownie.com.au/comments/commentRss/10.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Getting formatted code onto the web</title>
            <category>Blog</category>
            <link>http://blog.brownie.com.au/archive/2008/01/05/getting-formatted-code-onto-the-web.aspx</link>
            <description>&lt;p&gt;This post is mostly for me as I recently switched machines and forgot the steps and software needed to get nicely formatted code into my blog:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Download &lt;a href="http://www.jtleigh.com/people/colin/software/CopySourceAsHtml/"&gt;CopySourceAsHtml&lt;/a&gt; (as recommended by &lt;a href="http://www.hanselman.com/blog/ScottHanselmans2007UltimateDeveloperAndPowerUsersToolListForWindows.aspx"&gt;Hanselman&lt;/a&gt;) &lt;/li&gt;    &lt;li&gt;Extract the files from the MSI using &lt;a href="http://blogs.pingpoet.com/overflow/archive/2005/06/11/2837.aspx"&gt;Less MSIérables&lt;/a&gt; as the installer doesn't work with VS 2008. &lt;/li&gt;    &lt;li&gt;Copy the files to the VS 2008 plugin directory as per these &lt;a href="http://developers.de/blogs/andreas_erben/archive/2007/08/01/using-copysourceashtml-with-visual-studio-2008-beta-2.aspx"&gt;instructions&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;Open Visual Studio Enable the plugin from Tools &amp;gt; Add-in Manager &lt;/li&gt;    &lt;li&gt;Select text and choose "Copy AS HTML" from the context menu. &lt;/li&gt;    &lt;li&gt;Right click in windows live writer and select "Paste Special". Choose "Keep Formatting" from the dialog. &lt;/li&gt;    &lt;li&gt;&lt;span style="font-size: 10pt; background: white; color: black; font-family: courier new"&gt;&lt;span style="color: #2b91af"&gt;1&lt;/span&gt; Console.WriteLine(&lt;span style="color: #a31515"&gt;"Beautifully formatted Code!"&lt;/span&gt;); &lt;/span&gt;&lt;/li&gt; &lt;/ol&gt;  &lt;ol&gt;&lt;/ol&gt;  &lt;p&gt;I almost didn't bother trying this tool as I didn't like the way Visual Studio put boxes around blocks of SQL code.  I forgot of course that these boxes couldn't be carried over the HTML even if I'd wanted them too.  The SQL looks just as nice as it does in management studio: &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: #2b91af"&gt;    1&lt;/span&gt; &lt;span style="color: green"&gt;-- Comment: Comment goes here&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;    2&lt;/span&gt; &lt;span style="color: blue"&gt;SELECT &lt;/span&gt;* &lt;span style="color: blue"&gt;from &lt;/span&gt;Products&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;The only problem I am finding is that code quite quickly gets too wide and wraps messing up the line numbers. That is probably more to do with my blog template.&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;Update: &lt;/strong&gt;&lt;/font&gt;&lt;font color="#000000"&gt;I have just come across a neat way of solving the wrapping problem.  &lt;/font&gt;&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;font color="#000000"&gt;Uncheck wrap words in the copy as html dialog.&lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font color="#000000"&gt;Wrap my code in overflow divs:&lt;/font&gt;&lt;/li&gt; &lt;/ol&gt;  &lt;pre&gt;&amp;lt;DIV style="OVERFLOW: auto"&amp;gt;&lt;/pre&gt;

&lt;p&gt;I can now have nice scrollbars: &lt;/p&gt;

&lt;div style="overflow: auto"&gt;
  &lt;div style="font-size: 10pt; background: white; color: black; font-family: courier new"&gt;
    &lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   11&lt;/span&gt; [&lt;span style="color: #2b91af"&gt;Test&lt;/span&gt;]&lt;/pre&gt;

    &lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   12&lt;/span&gt;         &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; ShouldRetrieveSpeakerByEmail()&lt;/pre&gt;

    &lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   13&lt;/span&gt;         {&lt;/pre&gt;

    &lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   14&lt;/span&gt;             &lt;span style="color: #2b91af"&gt;Conference&lt;/span&gt; anConference = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Conference&lt;/span&gt;(&lt;span style="color: #a31515"&gt;"tea party"&lt;/span&gt;, &lt;span style="color: #a31515"&gt;""&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   15&lt;/span&gt;             &lt;span style="color: blue"&gt;using&lt;/span&gt; (&lt;span style="color: #2b91af"&gt;ISession&lt;/span&gt; session = getSession())&lt;/pre&gt;

    &lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   16&lt;/span&gt;             {&lt;/pre&gt;

    &lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   17&lt;/span&gt;                 session.SaveOrUpdate(anConference);&lt;/pre&gt;

    &lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   18&lt;/span&gt;                 session.Flush();&lt;/pre&gt;

    &lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   19&lt;/span&gt;             }&lt;/pre&gt;

    &lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   20&lt;/span&gt;             &lt;span style="color: blue"&gt;string&lt;/span&gt; email = &lt;span style="color: #a31515"&gt;"brownie@brownie.com.au"&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   21&lt;/span&gt;             &lt;span style="color: #2b91af"&gt;Speaker&lt;/span&gt; speaker =&lt;/pre&gt;

    &lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   22&lt;/span&gt;                 &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Speaker&lt;/span&gt;(&lt;span style="color: #a31515"&gt;"Andrew"&lt;/span&gt;, &lt;span style="color: #a31515"&gt;"Browne"&lt;/span&gt;, &lt;span style="color: #a31515"&gt;"http://blog.brownie.com.au"&lt;/span&gt;, &lt;span style="color: #a31515"&gt;"the comment"&lt;/span&gt;, anConference,&lt;/pre&gt;

    &lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   23&lt;/span&gt;                             email, &lt;span style="color: #a31515"&gt;"http://blog.brownie.com.au/avatar.jpg"&lt;/span&gt;, &lt;span style="color: #a31515"&gt;"Info about how important I am to go here."&lt;/span&gt;,&lt;span style="color: #a31515"&gt;"password"&lt;/span&gt;, &lt;span style="color: #a31515"&gt;"salt"&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   24&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   25&lt;/span&gt;             &lt;span style="color: #2b91af"&gt;ISpeakerRepository&lt;/span&gt; repository = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;SpeakerRepository&lt;/span&gt;(_sessionBuilder);&lt;/pre&gt;

    &lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   26&lt;/span&gt;             repository.Save(speaker);&lt;/pre&gt;

    &lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   27&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   28&lt;/span&gt;             &lt;span style="color: #2b91af"&gt;Speaker&lt;/span&gt; rehydratedSpeaker = &lt;span style="color: blue"&gt;null&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   29&lt;/span&gt;             &lt;span style="color: green"&gt;//get Attendee back from database to ensure it was saved correctly&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   30&lt;/span&gt;             &lt;span style="color: blue"&gt;using&lt;/span&gt; (&lt;span style="color: #2b91af"&gt;ISession&lt;/span&gt; session = getSession())&lt;/pre&gt;

    &lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   31&lt;/span&gt;             {&lt;/pre&gt;

    &lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   32&lt;/span&gt;                 rehydratedSpeaker = repository.GetSpeakerByEmail(email);&lt;/pre&gt;

    &lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   33&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   34&lt;/span&gt;                 &lt;span style="color: #2b91af"&gt;Assert&lt;/span&gt;.That(rehydratedSpeaker != &lt;span style="color: blue"&gt;null&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   35&lt;/span&gt;                 &lt;span style="color: #2b91af"&gt;Assert&lt;/span&gt;.That(rehydratedSpeaker.Contact.FirstName, &lt;span style="color: #2b91af"&gt;Is&lt;/span&gt;.EqualTo(&lt;span style="color: #a31515"&gt;"Andrew"&lt;/span&gt;));&lt;/pre&gt;

    &lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   36&lt;/span&gt;                 &lt;span style="color: #2b91af"&gt;Assert&lt;/span&gt;.That(rehydratedSpeaker.Website, &lt;span style="color: #2b91af"&gt;Is&lt;/span&gt;.EqualTo(&lt;span style="color: #a31515"&gt;"http://blog.brownie.com.au"&lt;/span&gt;));&lt;/pre&gt;

    &lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   37&lt;/span&gt;                 &lt;span style="color: #2b91af"&gt;Assert&lt;/span&gt;.That(rehydratedSpeaker.Comment, &lt;span style="color: #2b91af"&gt;Is&lt;/span&gt;.EqualTo(&lt;span style="color: #a31515"&gt;"the comment"&lt;/span&gt;));&lt;/pre&gt;

    &lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   38&lt;/span&gt;                 &lt;span style="color: #2b91af"&gt;Assert&lt;/span&gt;.That(rehydratedSpeaker.Conference, &lt;span style="color: #2b91af"&gt;Is&lt;/span&gt;.EqualTo(anConference));&lt;/pre&gt;

    &lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   39&lt;/span&gt;             }&lt;/pre&gt;

    &lt;pre style="margin: 0px"&gt;&lt;span style="color: #2b91af"&gt;   40&lt;/span&gt;         }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;&lt;img src="http://blog.brownie.com.au/aggbug/9.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/BrowniesBlog/~4/h5EHTz1vihU" height="1" width="1"/&gt;</description>
            <dc:creator>Andrew Browne</dc:creator>
            <guid>http://blog.brownie.com.au/archive/2008/01/05/getting-formatted-code-onto-the-web.aspx</guid>
            <pubDate>Sat, 05 Jan 2008 08:54:28 GMT</pubDate>
            <comments>http://blog.brownie.com.au/archive/2008/01/05/getting-formatted-code-onto-the-web.aspx#feedback</comments>
            <wfw:commentRss>http://blog.brownie.com.au/comments/commentRss/9.aspx</wfw:commentRss>
        </item>
        <item>
            <title>First Post!</title>
            <category>Brownie's Bikes</category>
            <link>http://blog.brownie.com.au/archive/2007/11/18/first-post.aspx</link>
            <description>&lt;p&gt;This blog is primarily the result of the idea that "there should be a better way". I think most of us are constantly looking for faster/easier/more maintainable ways of doing things.&lt;/p&gt;  &lt;p&gt;In my case I am currently working in ASP.NET on public facing &lt;a href="http://www.getstarted.com.au"&gt;websites&lt;/a&gt;. After many conversations with colleagues about datasets/tableadapters vs everything else I decided that all the talk in the world wasn't going to get a well considered result. Over the last few months I have been exploring different .NET data access strategies.&lt;/p&gt;  &lt;p&gt;My method of comparison so far has been to use each of the technologies in the data layer for my very simple List/View/Add/Edit sample app. The example application is based on the AdventureWorks Cycles and I've named it &lt;strong&gt;Brownie's Bikes&lt;/strong&gt;.  The example is probably a bit simple at the moment but we'll fix that over time.&lt;/p&gt;  &lt;p&gt;My work is up at &lt;a title="http://code.google.com/p/browniesbikes/" href="http://code.google.com/p/browniesbikes/"&gt;http://code.google.com/p/browniesbikes/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;My plan is for my first few posts to compare the different strategies and technologies I have used to implement the data access in Brownie's Bikes.  While doing this work I have also become very excited by better ways of developing the UI and architecture for websites so expect some posts about these topics too.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Disclaimer:&lt;/strong&gt; &lt;a href="http://www.jpboodhoo.com/blog/YouKnowAsMuchAsYouKnowRightNow.aspx"&gt;I only know as much as I know right now&lt;/a&gt;. I am very interested in better ways of doing things.  If you don't like my ideas I'd love to try yours. If you have a better idea or I am wrong let me know in an email/comment/link to your blog.  I have just finished the fourth data layer for my sample app and am planning more. I'm very open to trying any idea that looks reasonable.&lt;/p&gt;&lt;img src="http://blog.brownie.com.au/aggbug/5.aspx" width="1" height="1" /&gt;&lt;img src="http://feeds.feedburner.com/~r/BrowniesBlog/~4/O5PVWZp3Rfo" height="1" width="1"/&gt;</description>
            <dc:creator>Andrew Browne</dc:creator>
            <guid>http://blog.brownie.com.au/archive/2007/11/18/first-post.aspx</guid>
            <pubDate>Sun, 18 Nov 2007 05:59:52 GMT</pubDate>
            <comments>http://blog.brownie.com.au/archive/2007/11/18/first-post.aspx#feedback</comments>
            <wfw:commentRss>http://blog.brownie.com.au/comments/commentRss/5.aspx</wfw:commentRss>
        </item>
    </channel>
</rss>
