<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://drowningintechnicaldebt.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Shawn Weisfeld [MVP]</title><link>http://drowningintechnicaldebt.com/blogs/shawnweisfeld/default.aspx</link><description>Government&amp;#39;s view of the economy could be summed up in a few short phrases:  If it moves, tax it. If it keeps moving, regulate it. And if it stops moving, subsidize it.  - Ronald Reagan</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP1 (Build: 31106.3070)</generator><item><title>Extension Method to Resize an Image</title><link>http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/2009/06/28/extension-method-to-resize-an-image.aspx</link><pubDate>Sun, 28 Jun 2009 18:52:00 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:851</guid><dc:creator>sweisfeld</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://drowningintechnicaldebt.com/blogs/shawnweisfeld/rsscomments.aspx?PostID=851</wfw:commentRss><comments>http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/2009/06/28/extension-method-to-resize-an-image.aspx#comments</comments><description>&lt;p&gt;I wrote this for an INETA project that I have been working on, but thought it would be great to share with everyone. We had a need to take an image and change its size. Below is an implementation of a Resize Extension Method on the .NET Image object. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;I borrowed some ideas from this post by Mark McDonnell (&lt;a href="http://weblogs.asp.net/markmcdonnell/archive/2008/03/09/resize-image-before-uploading-to-server.aspx"&gt;http://weblogs.asp.net/markmcdonnell/archive/2008/03/09/resize-image-before-uploading-to-server.aspx&lt;/a&gt;)&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Linq;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Drawing;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Drawing.Drawing2D;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; Demo&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;{&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;enum&lt;/span&gt; ResizeMode&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;    { &lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;        Width,&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;        Height,&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;        Bigger&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;    }&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ImageHelper&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;    {&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; Image Resize(&lt;span class="kwrd"&gt;this&lt;/span&gt; Image source, &lt;span class="kwrd"&gt;int&lt;/span&gt; size, ResizeMode mode)&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;        {&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;            &lt;span class="rem"&gt;//Convert the source image into a bitmap so we can work with it&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;            Bitmap originalBMP = &lt;span class="kwrd"&gt;new&lt;/span&gt; Bitmap(source);&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;            Image result;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;            &lt;span class="rem"&gt;// Calculate the new image dimensions&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;            &lt;span class="kwrd"&gt;int&lt;/span&gt; origWidth = originalBMP.Width;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;            &lt;span class="kwrd"&gt;int&lt;/span&gt; origHeight = originalBMP.Height;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;            &lt;span class="kwrd"&gt;int&lt;/span&gt; newWidth = 0;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;            &lt;span class="kwrd"&gt;int&lt;/span&gt; newHeight = 0;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;            &lt;span class="rem"&gt;//If the size mode is set to bigger then find the widest side&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (mode == ResizeMode.Bigger)&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;            {&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;                &lt;span class="kwrd"&gt;if&lt;/span&gt; (origHeight &amp;gt; origWidth)&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;                    mode = ResizeMode.Height;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;                &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt;                    mode = ResizeMode.Width;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt;            }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  39:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  40:  &lt;/span&gt;            &lt;span class="rem"&gt;//keeping the aspect ratio constant, calculate the new size&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  41:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (mode == ResizeMode.Width)&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  42:  &lt;/span&gt;            {&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  43:  &lt;/span&gt;                newWidth = size;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  44:  &lt;/span&gt;                newHeight = (&lt;span class="kwrd"&gt;int&lt;/span&gt;)(size / ((&lt;span class="kwrd"&gt;double&lt;/span&gt;)origWidth / (&lt;span class="kwrd"&gt;double&lt;/span&gt;)origHeight));&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  45:  &lt;/span&gt;            }&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  46:  &lt;/span&gt;            &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  47:  &lt;/span&gt;            {&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  48:  &lt;/span&gt;                newHeight = size;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  49:  &lt;/span&gt;                newWidth = (&lt;span class="kwrd"&gt;int&lt;/span&gt;)(size / ((&lt;span class="kwrd"&gt;double&lt;/span&gt;)origHeight / (&lt;span class="kwrd"&gt;double&lt;/span&gt;)origWidth));&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  50:  &lt;/span&gt;            }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  51:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  52:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  53:  &lt;/span&gt;            &lt;span class="rem"&gt;// Create a new bitmap which will hold the previous resized bitmap&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  54:  &lt;/span&gt;            Bitmap newBMP = &lt;span class="kwrd"&gt;new&lt;/span&gt; Bitmap(originalBMP, newWidth, newHeight);&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  55:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  56:  &lt;/span&gt;            &lt;span class="rem"&gt;// Create a graphic based on the new bitmap&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  57:  &lt;/span&gt;            &lt;span class="kwrd"&gt;using&lt;/span&gt; (Graphics oGraphics = Graphics.FromImage(newBMP))&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  58:  &lt;/span&gt;            {&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  59:  &lt;/span&gt;                &lt;span class="rem"&gt;// Set the properties for the new graphic file&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  60:  &lt;/span&gt;                oGraphics.SmoothingMode = SmoothingMode.AntiAlias;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  61:  &lt;/span&gt;                oGraphics.InterpolationMode = InterpolationMode.HighQualityBicubic;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  62:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  63:  &lt;/span&gt;                &lt;span class="rem"&gt;// Draw the new graphic based on the resized bitmap&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  64:  &lt;/span&gt;                oGraphics.DrawImage(originalBMP, 0, 0, newWidth, newHeight);&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  65:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  66:  &lt;/span&gt;                &lt;span class="rem"&gt;// Save the new graphic file to the server&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  67:  &lt;/span&gt;                result = newBMP.Clone() &lt;span class="kwrd"&gt;as&lt;/span&gt; Image;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  68:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  69:  &lt;/span&gt;                &lt;span class="rem"&gt;// Once finished with the bitmap objects, we deallocate them.&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  70:  &lt;/span&gt;                originalBMP.Dispose();&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  71:  &lt;/span&gt;                newBMP.Dispose();&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  72:  &lt;/span&gt;                oGraphics.Dispose();&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  73:  &lt;/span&gt;            }&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  74:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  75:  &lt;/span&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; result;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  76:  &lt;/span&gt;        }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  77:  &lt;/span&gt;    }&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  78:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;

&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Using an extension method makes it really easy to use the new &amp;ldquo;resize&amp;rdquo; functionality:&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;            Image img = Image.FromFile(&lt;span class="str"&gt;&amp;quot;img.jpg&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;            Image resized = img.Resize(100, ResizeMode.Bigger);&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;            resized.Save(&lt;span class="str"&gt;&amp;quot;resized.jpg&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;

&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;So we went from a source size of 2304x1728 and 782 KB &lt;/p&gt;
&lt;p&gt;&lt;a href="http://drowningintechnicaldebt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/shawnweisfeld/image_5F00_0CCA186B.png"&gt;&lt;img border="0" width="712" src="http://drowningintechnicaldebt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/shawnweisfeld/image_5F00_thumb_5F00_57515645.png" alt="image" height="131" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;to 100x75 and 23.3 KB&lt;/p&gt;
&lt;p&gt;&lt;a href="http://drowningintechnicaldebt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/shawnweisfeld/image_5F00_15D6A3EC.png"&gt;&lt;img border="0" width="709" src="http://drowningintechnicaldebt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/shawnweisfeld/image_5F00_thumb_5F00_4357C3AF.png" alt="image" height="137" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now you to can shrink the size of your memories. :) &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=851" width="1" height="1"&gt;</description><category domain="http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/tags/Images/default.aspx">Images</category></item><item><title>Perspectives on Technology from Tech Ed North America – Shawn Weisfeld and Allen White</title><link>http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/2009/06/23/perspectives-on-technology-from-tech-ed-north-america-shawn-weisfeld-and-allen-white.aspx</link><pubDate>Wed, 24 Jun 2009 02:08:56 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:850</guid><dc:creator>sweisfeld</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://drowningintechnicaldebt.com/blogs/shawnweisfeld/rsscomments.aspx?PostID=850</wfw:commentRss><comments>http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/2009/06/23/perspectives-on-technology-from-tech-ed-north-america-shawn-weisfeld-and-allen-white.aspx#comments</comments><description>&lt;p&gt;Check out this recording I did for the folks at the MVP Program at TechEd 2009&lt;/p&gt;  &lt;p&gt;&lt;a title="http://blogs.msdn.com/mvpawardprogram/archive/2009/06/19/perspectives-on-technology-from-tech-ed-north-america-shawn-weisfeld-and-allen-white.aspx" href="http://blogs.msdn.com/mvpawardprogram/archive/2009/06/19/perspectives-on-technology-from-tech-ed-north-america-shawn-weisfeld-and-allen-white.aspx"&gt;http://blogs.msdn.com/mvpawardprogram/archive/2009/06/19/perspectives-on-technology-from-tech-ed-north-america-shawn-weisfeld-and-allen-white.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="MVP Shawn Weisfeld_Visual C#_MV_Andy Malone_Setup &amp;amp; Deployment" href="http://video.msn.com/video.aspx?vid=46aa2c6b-a40b-44d7-abae-fcb69dfb6e14" target="_new"&gt;&lt;img border="0" alt="MVP Shawn Weisfeld_Visual C#_MV_Andy Malone_Setup &amp;amp; Deployment" src="http://img3.catalog.video.msn.com/Image.aspx?uuid=46aa2c6b-a40b-44d7-abae-fcb69dfb6e14&amp;amp;w=112&amp;amp;h=84" width="112" height="84" /&gt;      &lt;br /&gt;MVP Shawn Weisfeld_Visual C#_MV_Andy Malone_Setup &amp;amp; Deployment&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a title="MVP Shawn Weisfeld_Visual C#_MVP_Allen White_SQL Server" href="http://video.msn.com/video.aspx?vid=ab4b8baf-a145-4e5d-973f-9f981f517ebc" target="_new"&gt;&lt;img border="0" alt="MVP Shawn Weisfeld_Visual C#_MVP_Allen White_SQL Server" src="http://img3.catalog.video.msn.com/Image.aspx?uuid=ab4b8baf-a145-4e5d-973f-9f981f517ebc&amp;amp;w=112&amp;amp;h=84" width="112" height="84" /&gt;      &lt;br /&gt;MVP Shawn Weisfeld_Visual C#_MVP_Allen White_SQL Server&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=850" width="1" height="1"&gt;</description><category domain="http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/tags/MVP/default.aspx">MVP</category></item><item><title>Get an Email from TFS on Check-in</title><link>http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/2009/06/23/get-an-email-from-tfs-on-check-in.aspx</link><pubDate>Wed, 24 Jun 2009 00:42:13 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:849</guid><dc:creator>sweisfeld</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://drowningintechnicaldebt.com/blogs/shawnweisfeld/rsscomments.aspx?PostID=849</wfw:commentRss><comments>http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/2009/06/23/get-an-email-from-tfs-on-check-in.aspx#comments</comments><description>&lt;p&gt;Want to get emails every time anything is checked into TFS? Open VS.NET, find the “Team” Menu and the “Project Alerts . . .” Option. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://drowningintechnicaldebt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/shawnweisfeld/clip_5F00_image002_5F00_6301C82E.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="clip_image002" border="0" alt="clip_image002" src="http://drowningintechnicaldebt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/shawnweisfeld/clip_5F00_image002_5F00_thumb_5F00_62959539.jpg" width="193" height="200" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Once there you can select what you want alerts by and enter your email address. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://drowningintechnicaldebt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/shawnweisfeld/clip_5F00_image004_5F00_218715D5.gif"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="clip_image004" border="0" alt="clip_image004" src="http://drowningintechnicaldebt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/shawnweisfeld/clip_5F00_image004_5F00_thumb_5F00_680405DD.gif" width="244" height="129" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt; Now hold on and watch your inbox fill up with all kinds of great information. &lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=849" width="1" height="1"&gt;</description><category domain="http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/tags/TFS/default.aspx">TFS</category></item><item><title>Silverlight &amp; no 64 bit</title><link>http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/2009/06/18/silverlight-amp-no-64-bit.aspx</link><pubDate>Thu, 18 Jun 2009 10:18:33 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:848</guid><dc:creator>sweisfeld</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://drowningintechnicaldebt.com/blogs/shawnweisfeld/rsscomments.aspx?PostID=848</wfw:commentRss><comments>http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/2009/06/18/silverlight-amp-no-64-bit.aspx#comments</comments><description>&lt;p&gt;When attempting to use a Silverlight application in the 64-bit version of IE you will get this message. “Microsoft Silverlight cannot be used in browsers running in 64 bit mode.”&lt;/p&gt;  &lt;p&gt;&lt;a href="http://drowningintechnicaldebt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/shawnweisfeld/clip_5F00_image002_5F00_4769AFE6.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="clip_image002" border="0" alt="clip_image002" src="http://drowningintechnicaldebt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/shawnweisfeld/clip_5F00_image002_5F00_thumb_5F00_421AC935.jpg" width="671" height="489" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;At first I was disappointed because I would like to see more of the industry move to 64 bit. Heck they are selling it at Best Buy now. However does Silverlight really need 64 bit? 64 bit gives you more throughput on the processor and more access to memory. But it is defiantly not typical for Silverlight applications to need that much memory and/or do highly processor intensive stuff. My guess MSFT had to make a choice between 64 bit and additional features in the runtime, like them I would have put my money in the additional features. &lt;/p&gt;  &lt;p&gt;The Gu gave an interview with &lt;a href="http://arstechnica.com/microsoft/news/2009/02/scott-guthrie-currently-no-plans-for-a-64-bit-silverlight.ars" target="_blank"&gt;Ars Technica&lt;/a&gt; where he talks about the plans that Microsoft has.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=848" width="1" height="1"&gt;</description><category domain="http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/tags/Silverlight/default.aspx">Silverlight</category></item><item><title>Query SharePoint with .NET</title><link>http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/2009/06/18/query-sharepoint-with-net.aspx</link><pubDate>Thu, 18 Jun 2009 09:52:08 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:847</guid><dc:creator>sweisfeld</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://drowningintechnicaldebt.com/blogs/shawnweisfeld/rsscomments.aspx?PostID=847</wfw:commentRss><comments>http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/2009/06/18/query-sharepoint-with-net.aspx#comments</comments><description>&lt;p&gt;I was attending the SharePoint Developers Group Meeting (&lt;a href="http://www.dspdg.org/"&gt;http://www.dspdg.org&lt;/a&gt;) last week and the presenter, Ty Anderson, of &lt;a href="http://www.cogentcompany.com"&gt;http://www.cogentcompany.com&lt;/a&gt; &amp;amp; &lt;a href="http://www.officedeveloper.com"&gt;http://www.officedeveloper.com&lt;/a&gt; demoed using MS Access as a shim to bridge the communication between a VSTO application and a SharePoint List. I thought the idea was cool so I threw together this quick sample for your consideration. Note: I have not tested this in a multi-user environment, nor would I recommend this when performance is a high priority. Regardless it is very cool!&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Step 1:&lt;/b&gt; Create your list in SharePoint: Here you can see my TestList, it has one column called title. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://drowningintechnicaldebt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/shawnweisfeld/clip_5F00_image002_5F00_2C22A518.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="clip_image002" border="0" alt="clip_image002" src="http://drowningintechnicaldebt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/shawnweisfeld/clip_5F00_image002_5F00_thumb_5F00_1DE42C28.jpg" width="244" height="82" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Step 2:&lt;/b&gt; Create the MS Access shim. Click Actions then “Open with Access”.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://drowningintechnicaldebt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/shawnweisfeld/clip_5F00_image004_5F00_0B9B6566.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="clip_image004" border="0" alt="clip_image004" src="http://drowningintechnicaldebt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/shawnweisfeld/clip_5F00_image004_5F00_thumb_5F00_391C8529.jpg" width="244" height="206" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This will create an “.accdb” file. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://drowningintechnicaldebt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/shawnweisfeld/clip_5F00_image006_5F00_71C72F36.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="clip_image006" border="0" alt="clip_image006" src="http://drowningintechnicaldebt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/shawnweisfeld/clip_5F00_image006_5F00_thumb_5F00_4A20B30C.jpg" width="244" height="167" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Step 3:&lt;/b&gt; Write .NET code to query the MS Access database&lt;/p&gt;  &lt;p&gt;First thing I will need is a connection string, in my app.config file:&lt;/p&gt;  &lt;div class="csharpcode"&gt;   &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;connectionStrings&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;add&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;ConnectionKey&amp;quot;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;     &lt;span class="attr"&gt;connectionString&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Provider=Microsoft.ACE.OLEDB.12.0;Data Source=TestList.accdb;&amp;quot;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;     &lt;span class="attr"&gt;providerName&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;System.Data.OleDb&amp;quot;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;     &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;connectionStrings&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Now some simple DataAccess code to query the database:&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;DataSet ds = &lt;span class="kwrd"&gt;new&lt;/span&gt; DataSet();&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&lt;span class="rem"&gt;//get the config info from the app.config file&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;ConnectionStringSettings myConnectionSettings = ConfigurationManager.ConnectionStrings[&lt;span class="str"&gt;&amp;quot;ConnectionKey&amp;quot;&lt;/span&gt;];&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;DbProviderFactory myProvider = DbProviderFactories.GetFactory(myConnectionSettings.ProviderName);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; (DbConnection myConnection = myProvider.CreateConnection())&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; (DbCommand myCommand = myProvider.CreateCommand())&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; (DbDataAdapter da = myProvider.CreateDataAdapter())&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;{&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;     myConnection.ConnectionString = myConnectionSettings.ConnectionString;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;     myCommand.Connection = myConnection;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;     myCommand.CommandType = System.Data.CommandType.Text;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;     myCommand.CommandText = &lt;span class="str"&gt;&amp;quot;SELECT * FROM [TestList]&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;     da.SelectCommand = myCommand;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;     da.Fill(ds);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;}&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;ds.WriteXml(&lt;span class="str"&gt;&amp;quot;results.xml&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;I can even Insert New records into the list:&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; (DbConnection myConnection = myProvider.CreateConnection())&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; (DbCommand myCommand = myProvider.CreateCommand())&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;{&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;     myConnection.ConnectionString = myConnectionSettings.ConnectionString;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;     myCommand.Connection = myConnection;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;     myCommand.CommandType = System.Data.CommandType.Text;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;     myCommand.CommandText = &lt;span class="str"&gt;&amp;quot;INSERT INTO [TestList] (Title) VALUES (&amp;#39;This is a test&amp;#39;)&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;     myCommand.Connection.Open();&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;     myCommand.ExecuteNonQuery();&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Moreover, I can even do Updates:&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; (DbConnection myConnection = myProvider.CreateConnection())&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; (DbCommand myCommand = myProvider.CreateCommand())&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;{&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;     myConnection.ConnectionString = myConnectionSettings.ConnectionString;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;     myCommand.Connection = myConnection;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;     myCommand.CommandType = System.Data.CommandType.Text;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;     myCommand.CommandText = &lt;span class="str"&gt;&amp;quot;UPDATE [TestList] SET Title = &amp;#39;This is a update test&amp;#39; WHERE Title = &amp;#39;This is a test&amp;#39;&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;     myCommand.Connection.Open();&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;     myCommand.ExecuteNonQuery();&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;and I can even do Deletes:&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; (DbConnection myConnection = myProvider.CreateConnection())&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; (DbCommand myCommand = myProvider.CreateCommand())&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;{&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;     myConnection.ConnectionString = myConnectionSettings.ConnectionString;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;     myCommand.Connection = myConnection;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;     myCommand.CommandType = System.Data.CommandType.Text;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;     myCommand.CommandText = &lt;span class="str"&gt;&amp;quot;DELETE FROM [TestList] WHERE Title = &amp;#39;This is a update test&amp;#39;&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;     myCommand.Connection.Open();&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;     myCommand.ExecuteNonQuery();&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;That is it, now your .NET code can work with SharePoint data, and best of all NO CAML to write!!!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=847" width="1" height="1"&gt;</description><category domain="http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>Property Causing a Stack Dump</title><link>http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/2009/06/15/property-causing-a-stack-dump.aspx</link><pubDate>Tue, 16 Jun 2009 00:26:50 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:846</guid><dc:creator>sweisfeld</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://drowningintechnicaldebt.com/blogs/shawnweisfeld/rsscomments.aspx?PostID=846</wfw:commentRss><comments>http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/2009/06/15/property-causing-a-stack-dump.aspx#comments</comments><description>&lt;p&gt;Got a call today, someone was getting a stack dump every time they tried to assign a value to a property. Here is a screen print of the problem they were having. can you spot the problem?&lt;/p&gt;  &lt;p&gt;&lt;a href="http://drowningintechnicaldebt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/shawnweisfeld/clip_5F00_image001_5F00_74C9F7DB.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="clip_image001" border="0" alt="clip_image001" src="http://drowningintechnicaldebt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/shawnweisfeld/clip_5F00_image001_5F00_thumb_5F00_33BB7877.jpg" width="488" height="822" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If you said that the property is calling itself you get a gold star.&amp;#160; What was happening is that every time we tried to set the Name property, it calls the Name property to set it, and that called the Name property, and that called the Name property, over and over again, till .NET stack dumped. We are missing a backing variable. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://drowningintechnicaldebt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/shawnweisfeld/clip_5F00_image0017_5F00_586C8FEE.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="clip_image001[7]" border="0" alt="clip_image001[7]" src="http://drowningintechnicaldebt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/shawnweisfeld/clip_5F00_image0017_5F00_thumb_5F00_3E9859BF.jpg" width="444" height="643" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;By backing the property with a private variable, it removes the infinite recursion. Since the variable itself is private nobody can see it, or can use it outside the class, they are forced to use the property, and all is right with the world again!&amp;#160; &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=846" width="1" height="1"&gt;</description><category domain="http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/tags/.NET/default.aspx">.NET</category></item><item><title>Populating a Generic List in VB.NET</title><link>http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/2009/06/15/populating-a-generic-list-in-vb-net.aspx</link><pubDate>Tue, 16 Jun 2009 00:17:35 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:845</guid><dc:creator>sweisfeld</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://drowningintechnicaldebt.com/blogs/shawnweisfeld/rsscomments.aspx?PostID=845</wfw:commentRss><comments>http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/2009/06/15/populating-a-generic-list-in-vb-net.aspx#comments</comments><description>&lt;p&gt;Got a question on how to populate a generic list in VB.NET, and while I am a C# guy, I figured I would show some VB.NET love. &lt;/p&gt;  &lt;p&gt;For this example I will be using a customer class, he is real simple just 2 properties. One for first name and one for last name. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div class="csharpcode"&gt;   &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Class&lt;/span&gt; Customer&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="kwrd"&gt;Private&lt;/span&gt; _first_name &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Property&lt;/span&gt; FirstName() &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;        &lt;span class="kwrd"&gt;Get&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;            &lt;span class="kwrd"&gt;Return&lt;/span&gt; _first_name&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Get&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;        &lt;span class="kwrd"&gt;Set&lt;/span&gt;(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; value &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;)&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;            _first_name = value&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Set&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Property&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;    &lt;span class="kwrd"&gt;Private&lt;/span&gt; _last_name &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Property&lt;/span&gt; LastName() &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;        &lt;span class="kwrd"&gt;Get&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;            &lt;span class="kwrd"&gt;Return&lt;/span&gt; _last_name&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Get&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;        &lt;span class="kwrd"&gt;Set&lt;/span&gt;(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; value &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;)&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;            _last_name = value&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Set&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Property&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;&lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Class&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Now that I have a class I can new up a list of that type:&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;Dim&lt;/span&gt; customers &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; List(Of Customer)&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Now I can create an object of type customer set its properties and add it to the list:&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; c &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; Customer&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;        c.FirstName = &lt;span class="str"&gt;&amp;quot;Shawn&amp;quot;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;        c.LastName = &lt;span class="str"&gt;&amp;quot;Weisfeld&amp;quot;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;        customers.Add(c)&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;That is a bit tedious, lets simplify using the with statement:&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; c2 &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; Customer&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;        &lt;span class="kwrd"&gt;With&lt;/span&gt; c2&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;            .FirstName = &lt;span class="str"&gt;&amp;quot;Shawn&amp;quot;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;            .LastName = &lt;span class="str"&gt;&amp;quot;Weisfeld&amp;quot;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;With&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;        customers.Add(c2)&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Still too long, how about we create a constructor by adding the following code to our customer object: (NOTE: that I create 2 constructors, the first one that has no parameters is created by us automatically by VB.NET, however when we specify our own constructor VB.NET doesn’t give us the default one for free, so we have to code him up, assuming we wanted to have a parameter-less constructor)&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt;()&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt;(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; first_name &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;, &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; last_name &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;        &lt;span class="kwrd"&gt;Me&lt;/span&gt;.FirstName = first_name&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;        &lt;span class="kwrd"&gt;Me&lt;/span&gt;.LastName = last_name&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    &lt;span class="kwrd"&gt;End&lt;/span&gt; Sub&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Now that I have the constructor I can now new up the customer and add him to my list in one line of code:&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;        customers.Add(&lt;span class="kwrd"&gt;New&lt;/span&gt; Customer(&lt;span class="str"&gt;&amp;quot;Shawn&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;Weisfeld&amp;quot;&lt;/span&gt;))&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="csharpcode"&gt;&amp;#160;&lt;/div&gt;

&lt;div class="csharpcode"&gt;Well that is all good, but what if we don’t own the class and cannot add constructors. Well VS.NET 2008 (.NET 3.5) includes something called Object Initializers:&lt;/div&gt;

&lt;div class="csharpcode"&gt;&amp;#160;&lt;/div&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; c3 = &lt;span class="kwrd"&gt;New&lt;/span&gt; Customer() &lt;span class="kwrd"&gt;With&lt;/span&gt; {.FirstName = &lt;span class="str"&gt;&amp;quot;Shawn&amp;quot;&lt;/span&gt;, .LastName = &lt;span class="str"&gt;&amp;quot;Weisfeld&amp;quot;&lt;/span&gt;}&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;        customers.Add(c3)&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;That is better and we can even get it to a 1 line-er:&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;        customers.Add(&lt;span class="kwrd"&gt;New&lt;/span&gt; Customer() &lt;span class="kwrd"&gt;With&lt;/span&gt; {.FirstName = &lt;span class="str"&gt;&amp;quot;Shawn&amp;quot;&lt;/span&gt;, .LastName = &lt;span class="str"&gt;&amp;quot;Weisfeld&amp;quot;&lt;/span&gt;})&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Now your objects can go forth an multiply!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=845" width="1" height="1"&gt;</description><category domain="http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/tags/.NET/default.aspx">.NET</category><category domain="http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/tags/VB.NET/default.aspx">VB.NET</category></item><item><title>SQL CLR: Query the file system to get a list of folders</title><link>http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/2009/06/11/sql-clr-query-the-file-system-to-get-a-list-of-folders.aspx</link><pubDate>Thu, 11 Jun 2009 05:12:49 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:843</guid><dc:creator>sweisfeld</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://drowningintechnicaldebt.com/blogs/shawnweisfeld/rsscomments.aspx?PostID=843</wfw:commentRss><comments>http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/2009/06/11/sql-clr-query-the-file-system-to-get-a-list-of-folders.aspx#comments</comments><description>&lt;p&gt;Today was a good day for questions, got one asking how to query the file system from sql server. See they have a list of network shares that they want to find out what folders are in each. SQL CLR to the rescue. . . &lt;/p&gt;  &lt;p&gt;First lets write a Table Valued Function to get a list of folders. I chose a Table Valued Function so I can join it to a list of paths to search in sql server. Remember that since we are leaving the confines of the SQL Server to get data from the disk we need to elevate our permission, we are also impersonating a domain account as they have access to external resources. &lt;/p&gt;  &lt;p&gt;here is the code for the Table Valued Function:&lt;/p&gt;   &lt;div class="csharpcode"&gt;   &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Data;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Data.SqlClient;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Data.SqlTypes;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.SqlServer.Server;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Security.Principal;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;partial&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; UserDefinedFunctions&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;{&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;    &lt;span class="rem"&gt;/// Get a list of all the folders in a given path, for a given number of levels deep&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;param name=&amp;quot;path&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;param name=&amp;quot;levels&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;    [SqlFunction(FillRowMethodName = &lt;span class="str"&gt;&amp;quot;FillRow&amp;quot;&lt;/span&gt;, TableDefinition = &lt;span class="str"&gt;&amp;quot;directory nvarchar(4000)&amp;quot;&lt;/span&gt;, DataAccess=DataAccessKind.Read)]&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; IEnumerable Folders(String path, &lt;span class="kwrd"&gt;int&lt;/span&gt; levels)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;    {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;        WindowsImpersonationContext impersonatedIdentity = &lt;span class="kwrd"&gt;null&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;        List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; results = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;();&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;        &lt;span class="kwrd"&gt;try&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;            &lt;span class="rem"&gt;//impersonate the user that is executing me in sql server&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;            impersonatedIdentity = SqlContext.WindowsIdentity.Impersonate();&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;            &lt;span class="rem"&gt;//Get the data&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;            GetDirectories(results, path, levels);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;        }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;        &lt;span class="kwrd"&gt;finally&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;            &lt;span class="rem"&gt;//undo the impersonation&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (impersonatedIdentity != &lt;span class="kwrd"&gt;null&lt;/span&gt;)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;            {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt;                impersonatedIdentity.Undo();&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt;            }&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  39:  &lt;/span&gt;        }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  40:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  41:  &lt;/span&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; results;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  42:  &lt;/span&gt;    }&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  43:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  44:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  45:  &lt;/span&gt;    &lt;span class="rem"&gt;/// Recursivly dig through the file system getting data&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  46:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  47:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;param name=&amp;quot;results&amp;quot;&amp;gt;List of the results&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  48:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;param name=&amp;quot;path&amp;quot;&amp;gt;Current Path we are looking into&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  49:  &lt;/span&gt;    &lt;span class="rem"&gt;/// &amp;lt;param name=&amp;quot;levels&amp;quot;&amp;gt;Number of levels left to dig down&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  50:  &lt;/span&gt;    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; GetDirectories(List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; results, &lt;span class="kwrd"&gt;string&lt;/span&gt; path, &lt;span class="kwrd"&gt;int&lt;/span&gt; levels)&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  51:  &lt;/span&gt;    {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  52:  &lt;/span&gt;        &lt;span class="rem"&gt;//are we at the bottom of the query&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  53:  &lt;/span&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; (levels &amp;gt; 0)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  54:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  55:  &lt;/span&gt;            &lt;span class="rem"&gt;//append on the slash if we dont have it&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  56:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (!path.EndsWith(&lt;span class="str"&gt;&amp;quot;\\&amp;quot;))&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  57:  &lt;/span&gt;            {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  58:  &lt;/span&gt;                path = path + &amp;quot;&lt;/span&gt;\\&lt;span class="str"&gt;&amp;quot;;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  59:  &lt;/span&gt;            }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  60:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  61:  &lt;/span&gt;            try&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  62:  &lt;/span&gt;            {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  63:  &lt;/span&gt;                //get a list of all the folders under the current path&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  64:  &lt;/span&gt;                foreach (string folder in System.IO.Directory.GetDirectories(path, &amp;quot;&lt;/span&gt;*&lt;span class="str"&gt;&amp;quot;, System.IO.SearchOption.TopDirectoryOnly))&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  65:  &lt;/span&gt;                {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  66:  &lt;/span&gt;                    //add each to the results, then dig down one more level&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  67:  &lt;/span&gt;                    results.Add(folder);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  68:  &lt;/span&gt;                    GetDirectories(results, folder, levels - 1);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  69:  &lt;/span&gt;                }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  70:  &lt;/span&gt;            }&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  71:  &lt;/span&gt;            catch (UnauthorizedAccessException ex)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  72:  &lt;/span&gt;            {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  73:  &lt;/span&gt;                //If we dont have access to a folder, just report that back in the result set&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  74:  &lt;/span&gt;                results.Add(ex.Message);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  75:  &lt;/span&gt;            }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  76:  &lt;/span&gt;        }&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  77:  &lt;/span&gt;    }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  78:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  79:  &lt;/span&gt;    /// &amp;lt;summary&amp;gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  80:  &lt;/span&gt;    /// convert one of our Enumerable objects into a data row&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  81:  &lt;/span&gt;    /// &amp;lt;/summary&amp;gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  82:  &lt;/span&gt;    /// &amp;lt;param name=&amp;quot;&lt;/span&gt;obj&lt;span class="str"&gt;&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  83:  &lt;/span&gt;    /// &amp;lt;param name=&amp;quot;&lt;/span&gt;directory&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  84:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; FillRow(Object obj, &lt;span class="kwrd"&gt;out&lt;/span&gt; SqlChars directory)&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  85:  &lt;/span&gt;    {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  86:  &lt;/span&gt;        directory = &lt;span class="kwrd"&gt;new&lt;/span&gt; SqlChars(obj.ToString());&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  87:  &lt;/span&gt;    }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  88:  &lt;/span&gt;};&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;I created a table (SearchPaths) that contains a list of all the paths that I want to search:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://drowningintechnicaldebt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/shawnweisfeld/image_5F00_2E8912F6.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://drowningintechnicaldebt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/shawnweisfeld/image_5F00_thumb_5F00_067663D7.png" width="600" height="349" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Now I can just join the list of paths to search with the function and I have everything I was looking for:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://drowningintechnicaldebt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/shawnweisfeld/image_5F00_44234B93.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://drowningintechnicaldebt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/shawnweisfeld/image_5F00_thumb_5F00_43B7189E.png" width="674" height="466" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;If you are getting security exceptions and the like take a look at the slides from the CLR talk I gave a PASS Summit 2008, they should get you moving in the right direction. &lt;/p&gt;

&lt;p&gt;&lt;a title="http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/2008/11/23/sql-pass-2008-talk.aspx" href="http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/2008/11/23/sql-pass-2008-talk.aspx"&gt;http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/2008/11/23/sql-pass-2008-talk.aspx&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=843" width="1" height="1"&gt;</description><category domain="http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/tags/SQL/default.aspx">SQL</category></item><item><title>SQL Server: Who am I?</title><link>http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/2009/06/10/sql-server-who-am-i.aspx</link><pubDate>Thu, 11 Jun 2009 03:48:30 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:842</guid><dc:creator>sweisfeld</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://drowningintechnicaldebt.com/blogs/shawnweisfeld/rsscomments.aspx?PostID=842</wfw:commentRss><comments>http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/2009/06/10/sql-server-who-am-i.aspx#comments</comments><description>&lt;p&gt;Got a question today. How do I tell what user my sql server query is running as? Well you just ask. &lt;/p&gt;  &lt;p&gt;Using the USER_NAME() function, without passing it an id, finds the name of the current user. &lt;/p&gt;  &lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/ms188014.aspx" href="http://msdn.microsoft.com/en-us/library/ms188014.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms188014.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Using the SUSER_NAME() function, gets me the login identification name of the user.&lt;/p&gt;  &lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/ms187934.aspx" href="http://msdn.microsoft.com/en-us/library/ms187934.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms187934.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Here is an example of each, using both a regular sql server login (left) and windows authentication (right)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://drowningintechnicaldebt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/shawnweisfeld/image_5F00_10EEF353.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://drowningintechnicaldebt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/shawnweisfeld/image_5F00_thumb_5F00_61BD07BB.png" width="646" height="258" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Now that I know who I am, why not be someone else. . . In this example I change the context that I am running under with the “EXECUTE AS LOGIN” statement, then I revert back using . . . wait for it. . . the “REVERT” statement. &lt;/p&gt;  &lt;p&gt;EXECUTE AS: &lt;a title="http://msdn.microsoft.com/en-us/library/ms181362.aspx" href="http://msdn.microsoft.com/en-us/library/ms181362.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms181362.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;REVERT: &lt;a title="http://msdn.microsoft.com/en-us/library/ms178632.aspx" href="http://msdn.microsoft.com/en-us/library/ms178632.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms178632.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://drowningintechnicaldebt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/shawnweisfeld/image_5F00_635DADC2.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://drowningintechnicaldebt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/shawnweisfeld/image_5F00_thumb_5F00_7461DBA5.png" width="332" height="567" /&gt;&lt;/a&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;and they say getting to know ones self is hard. . . &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=842" width="1" height="1"&gt;</description><category domain="http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/tags/SQL/default.aspx">SQL</category></item><item><title>SQL Server 2008 Access is Denied Error During Install</title><link>http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/2009/06/08/sql-server-2008-access-is-denied-error-during-install.aspx</link><pubDate>Mon, 08 Jun 2009 10:33:00 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:840</guid><dc:creator>sweisfeld</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://drowningintechnicaldebt.com/blogs/shawnweisfeld/rsscomments.aspx?PostID=840</wfw:commentRss><comments>http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/2009/06/08/sql-server-2008-access-is-denied-error-during-install.aspx#comments</comments><description>&lt;p&gt;&lt;strong&gt;Problem&lt;/strong&gt;: when installing SQL Server 2008 you get an Access is Denied Error.&lt;/p&gt;
&lt;p&gt;Here is the error you get during install. . . . &lt;/p&gt;
&lt;p&gt;&lt;a href="http://drowningintechnicaldebt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/shawnweisfeld/clip_5F00_image002_5F00_5BC32399.jpg"&gt;&lt;img border="0" width="413" src="http://drowningintechnicaldebt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/shawnweisfeld/clip_5F00_image002_5F00_thumb_5F00_2D699DEC.jpg" alt="clip_image002" height="116" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="clip_image002" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Check your Local Security Policy, you need to ensure that Administrators have &amp;ldquo;Debug programs&amp;rdquo; permission (Security Settings | Local Policies | User Rights Assignment)&lt;/p&gt;
&lt;p&gt;More information can be found in the following articles:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=390424"&gt;https://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=390424&lt;/a&gt; &lt;span style="color:red;"&gt;(If you have had this error please follow this link and vote that it gets fixed in connect)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://social.msdn.microsoft.com/forums/en-US/sqlsetupandupgrade/thread/ed4514fa-8d1d-4383-bbdf-fb06bfbad106/"&gt;http://social.msdn.microsoft.com/forums/en-US/sqlsetupandupgrade/thread/ed4514fa-8d1d-4383-bbdf-fb06bfbad106/&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=840" width="1" height="1"&gt;</description><category domain="http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/tags/SQL/default.aspx">SQL</category></item><item><title>Austin Code Camp 2009</title><link>http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/2009/05/30/austin-code-camp-2009.aspx</link><pubDate>Sat, 30 May 2009 12:32:19 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:838</guid><dc:creator>sweisfeld</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://drowningintechnicaldebt.com/blogs/shawnweisfeld/rsscomments.aspx?PostID=838</wfw:commentRss><comments>http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/2009/05/30/austin-code-camp-2009.aspx#comments</comments><description>&lt;p&gt;Coming from Florida where I attended every code camp and spoke at every code camp except for one, well until I moved it is nice to be getting into the swing of things out here in Texas. Today I will be giving my ASP.NET Dynamic Data talk at the Austin Code Camp and I cannot wait. I will be repeating the presentation at the Dallas Tech Fest on June 19 if you cannot make it today. &lt;/p&gt;  &lt;p&gt;Austin Code Camp: &lt;a title="http://www.adnug.org/AustinCodeCamp09" href="http://www.adnug.org/AustinCodeCamp09"&gt;http://www.adnug.org/AustinCodeCamp09&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Presentation &lt;a title="Download" href="http://www.developerroundtable.com/Libraries/Misc_Stuff/DynamicData_Demo.sflb.ashx?download=true"&gt;Download&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Dallas Tech Fest: &lt;a title="http://dallastechfest.com/" href="http://dallastechfest.com/"&gt;http://dallastechfest.com/&lt;/a&gt; (while the early bird discount is over, you can still use the discount code DOTNET to get $25 off admission)&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=838" width="1" height="1"&gt;</description><category domain="http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/tags/ASP.NET+Dynamic+Data/default.aspx">ASP.NET Dynamic Data</category></item><item><title>VIPRE from Sunbelt Software</title><link>http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/2009/05/25/vipre-from-sunbelt-software.aspx</link><pubDate>Mon, 25 May 2009 22:44:55 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:837</guid><dc:creator>sweisfeld</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://drowningintechnicaldebt.com/blogs/shawnweisfeld/rsscomments.aspx?PostID=837</wfw:commentRss><comments>http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/2009/05/25/vipre-from-sunbelt-software.aspx#comments</comments><description>&lt;p&gt;UPDATED:&lt;/p&gt;  &lt;p&gt;While I was at Tech Ed I was eating breakfast with a salesman from Sunbelt. Yea I know what you are thinking another salesman, but this guy wasn’t pushy, actually I did not even get his name, but long story short he told me about their product, VIPRE. There are a couple of cool things about there product. 1) it is supposed to be very fast, that is good in an antivirus. 2) it works on Server OS’s (like win 2k3 and win 2k8), and 3) they have an unlimited site license for home users. Since I run many Virtual Servers in my house this was the perfect option for me (i.e. $50 to get antivirus for all my computers).&lt;/p&gt;  &lt;p&gt;Only time will tell if it will work as advertised, I will be sure to report back if I have any problems. . . .&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;strike&gt;One downside is that they don&amp;#39;t say if you can use VIPRE on Win 7. . . . (I am emailing their sales department to find out.) &lt;/strike&gt;&lt;/p&gt;  &lt;p&gt;I spoke to the team at VIPRE and they said that they are working on Win 7 compatibility and they should be ready when Win 7 goes to RTM. &lt;/p&gt;  &lt;p&gt;Check them out at &lt;a title="http://www.sunbeltsoftware.com/home-home-office/vipre/" href="http://www.sunbeltsoftware.com/home-home-office/vipre/"&gt;http://www.sunbeltsoftware.com/home-home-office/vipre/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;BTW this doesn’t replace how much I like OneCare (&lt;a title="http://onecare.live.com" href="http://onecare.live.com"&gt;http://onecare.live.com&lt;/a&gt;) for the &lt;strong&gt;typical home user&lt;/strong&gt;, however that doesn&amp;#39;t work on Server OS-es and only supports up to 3 computers. &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=837" width="1" height="1"&gt;</description><category domain="http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/tags/Downloads/default.aspx">Downloads</category></item><item><title>Couldn't attend MIX 09?</title><link>http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/2009/05/18/couldn-t-attend-mix-09.aspx</link><pubDate>Tue, 19 May 2009 00:23:08 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:835</guid><dc:creator>sweisfeld</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://drowningintechnicaldebt.com/blogs/shawnweisfeld/rsscomments.aspx?PostID=835</wfw:commentRss><comments>http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/2009/05/18/couldn-t-attend-mix-09.aspx#comments</comments><description>&lt;a href="http://drowningintechnicaldebt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/shawnweisfeld/MIXNotes_5F00_073B72E3.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="" border="0" alt="" src="http://drowningintechnicaldebt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/shawnweisfeld/MIXNotes_5F00_thumb_5F00_66B43330.png" width="244" height="68" /&gt;&lt;/a&gt;   &lt;p&gt;&lt;/p&gt;  &lt;p&gt;We are bringing MIX to the DFW area, but instead of repeating the MIX conference, we are boiling down the best of MIX into a 1-day hands on lab. This community event, called MIX Notes, will provide hands-on examples presented by industry leaders. &lt;/p&gt;  &lt;p&gt;Computers will be provided, but participants are welcome to bring their own laptops. &lt;/p&gt;  &lt;p&gt;Where:&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Tekfocus (in the InfoMart)   &lt;br /&gt;When:&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; June 20, 9 AM - 4 PM    &lt;br /&gt;Registration Fee:&amp;#160;&amp;#160; $25 &lt;/p&gt;  &lt;p&gt;* Lunch will be provided &lt;/p&gt;  &lt;p&gt;Sign up today at &lt;a href="http://www.mixnotes.net"&gt;http://www.mixnotes.net&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=835" width="1" height="1"&gt;</description><category domain="http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/tags/.NET/default.aspx">.NET</category><category domain="http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/tags/Event/default.aspx">Event</category></item><item><title>Are you Coming to the Dallas Tech Fest 2009?</title><link>http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/2009/05/09/are-you-coming-to-the-dallas-tech-fest-2009.aspx</link><pubDate>Sat, 09 May 2009 22:15:09 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:824</guid><dc:creator>sweisfeld</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://drowningintechnicaldebt.com/blogs/shawnweisfeld/rsscomments.aspx?PostID=824</wfw:commentRss><comments>http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/2009/05/09/are-you-coming-to-the-dallas-tech-fest-2009.aspx#comments</comments><description>&lt;p&gt;I will be speaking at the Dallas Tech Fest, but that should not prevent you from coming. . . &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://dallastechfest.com" target="_blank"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="Dallas%20TechFest%20Slide" border="0" alt="Dallas%20TechFest%20Slide" src="http://drowningintechnicaldebt.com/blogs/shawnweisfeld/Dallas20TechFest20Slide_0BEE0796.png" width="332" height="257" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=824" width="1" height="1"&gt;</description><category domain="http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/tags/.NET/default.aspx">.NET</category><category domain="http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/tags/Event/default.aspx">Event</category></item><item><title>See you at TechEd 2009 in LA</title><link>http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/2009/05/09/see-you-at-teched-2009-in-la.aspx</link><pubDate>Sat, 09 May 2009 13:00:03 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:823</guid><dc:creator>sweisfeld</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://drowningintechnicaldebt.com/blogs/shawnweisfeld/rsscomments.aspx?PostID=823</wfw:commentRss><comments>http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/2009/05/09/see-you-at-teched-2009-in-la.aspx#comments</comments><description>&lt;p&gt;I will be spending most of the week at either the MVP booth or the INETA booth. Stop by and say hi!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.msteched.com"&gt;&lt;img border="0" alt="" src="http://www.msteched.com/teched/img/badges/community/ineta/TENA_blgr1_inetahangs.gif" /&gt; &lt;/a&gt;&lt;a href="http://www.partywithpalermo.com"&gt;&lt;img style="border-bottom-style:none;border-right-style:none;border-top-style:none;border-left-style:none;" alt="Party with Palermo" src="http://www.partywithpalermo.com/images/pwpbadge.jpg" /&gt; &lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=823" width="1" height="1"&gt;</description><category domain="http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/tags/Event/default.aspx">Event</category><category domain="http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/tags/INETA/default.aspx">INETA</category></item></channel></rss>