<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-10158221</id><updated>2010-03-24T05:48:44.852-04:00</updated><title type='text'>Kris Krause .NET Meister</title><subtitle type='html'>Developing software in Northern New Jersey.  And keeping it simple.</subtitle><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/posts/default'/><link rel='alternate' type='text/html' href='http://www.kriskrause.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/posts/default?start-index=26&amp;max-results=25'/><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.kriskrause.com/atom.xml'/><author><name>Kristofer Krause</name><uri>http://www.blogger.com/profile/00715084587222905919</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>29</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-10158221.post-9200030713710995681</id><published>2009-08-06T21:40:00.006-04:00</published><updated>2009-11-21T19:45:39.422-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><title type='text'>.NET mySql PerformanceMonitor Class</title><content type='html'>The 6.x mySql Connector for .NET comes with two performance counters that seem to be working rather well.  If I call the same stored procedure 1,000 times... the metadata is only retrieved from the server the first time.  All subsequent calls utilize the client-side cache.  You can see this using the Performance Monitor graph in Control Panel -&gt; Administrative Tools -&gt; Performance.&lt;br /&gt;&lt;br /&gt;Also, you have set the following parameter in your connection string:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: sql;"&gt;Use Performance Monitor=true;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;HardProcedureQueries - The number of times a procedures metadata had to be queried from the server.&lt;br /&gt;&lt;br /&gt;SoftProcedureQueries - The number of times a procedures metadata was retrieved from the client-side cache.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10158221-9200030713710995681?l=www.kriskrause.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/9200030713710995681/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=10158221&amp;postID=9200030713710995681' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/posts/default/9200030713710995681'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/posts/default/9200030713710995681'/><link rel='alternate' type='text/html' href='http://www.kriskrause.com/2009/08/net-mysql-performancemonitor-class.html' title='.NET mySql PerformanceMonitor Class'/><author><name>Kristofer Krause</name><uri>http://www.blogger.com/profile/00715084587222905919</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02868544994241265818'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10158221.post-657318445424991098</id><published>2009-06-29T14:54:00.023-04:00</published><updated>2009-07-09T14:19:00.777-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><title type='text'>Concrete Example - Mocking .NET Objects w/NUnit</title><content type='html'>&lt;a href="http://www.zorched.net/2007/03/10/mocking-net-objects-with-nunit/" target="_blank"&gt;Geoff Lane&lt;/a&gt; does a very good job of explaining .NET Mock objects.&lt;br /&gt;&lt;br /&gt;People were requesting a "concrete" example so I implemented an example C# console application (although this can easily be made into an ASP.NET web application).&lt;br /&gt;&lt;br /&gt;Geoff hints to using Spring .NET to wire things up, but that might be too confusing for some people.  And maybe a little over board for a simple example (&lt;a href="http://www.lostechies.com/cfs-filesystemfile.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/derickbailey/OpenClosedPrinciple2_5F00_2C596E17.jpg"&gt;open closed principle&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;So instead I created a PersonServiceManager that creates a "concrete" PersonService via IPersonRepository injection.  The GUI communicates to the PersonServiceManager through an IPersonService interface.&lt;br /&gt;&lt;br /&gt;Instead of "mocking" an IPersonRepository, we are actually implementing it then injecting it into PersonService (just like our NUnit test).  The PersonServiceManager handles passing the appropriate database connection string down to the data layer.  In my example, the data layer object PersonDb (which implements IPersonRepository and used for injection) utilizes the DbProviderFactory.&lt;br /&gt;&lt;br /&gt;Here is the &lt;a href="http://www.kriskrause.com/downloads/NUnitMockConsole.zip" target="_blank"&gt;sample source&lt;/a&gt; (C# Console App).&lt;br /&gt;&lt;br /&gt;Also remember that the sample source could be broken down into separate assemblies in a real world project.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10158221-657318445424991098?l=www.kriskrause.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/657318445424991098/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=10158221&amp;postID=657318445424991098' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/posts/default/657318445424991098'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/posts/default/657318445424991098'/><link rel='alternate' type='text/html' href='http://www.kriskrause.com/2009/06/concrete-example-mocking-net-objects.html' title='Concrete Example - Mocking .NET Objects w/NUnit'/><author><name>Kristofer Krause</name><uri>http://www.blogger.com/profile/00715084587222905919</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02868544994241265818'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10158221.post-4425408580416812922</id><published>2009-06-24T10:16:00.008-04:00</published><updated>2009-06-24T10:25:21.404-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ie'/><category scheme='http://www.blogger.com/atom/ns#' term='jquery'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>Side by Side - IE8, IE6, IE5.5, IE5, IE4.01, &amp; IE3</title><content type='html'>Running IE8 on your computer?  The included developer tools are great.  Need to switch to IE7 mode?  No problem using IE8.&lt;br /&gt;&lt;br /&gt;But what about IE6, IE5.5, IE5, IE4.01, and IE3?  Here is a free multiple installer you can use.  And it works!  And I performed a virus scan (before and after the install)... no problems detected.&lt;br /&gt;&lt;br /&gt;Unfortunately, a couple of my JQuery sites look weird with IE6.  I know I know, its not JQuery... rather its the IE6 CSS quirks (among other things... standards compliance... cough... cough...).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://tredosoft.com/Multiple_IE" target="_blank"&gt;http://tredosoft.com/Multiple_IE&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10158221-4425408580416812922?l=www.kriskrause.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/4425408580416812922/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=10158221&amp;postID=4425408580416812922' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/posts/default/4425408580416812922'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/posts/default/4425408580416812922'/><link rel='alternate' type='text/html' href='http://www.kriskrause.com/2009/06/running-ie8-on-your-computer-included.html' title='Side by Side - IE8, IE6, IE5.5, IE5, IE4.01, &amp; IE3'/><author><name>Kristofer Krause</name><uri>http://www.blogger.com/profile/00715084587222905919</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02868544994241265818'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10158221.post-2400262696243249570</id><published>2009-06-22T16:15:00.005-04:00</published><updated>2009-11-21T19:47:10.749-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><title type='text'>Example mySql IsDate Function</title><content type='html'>Here is an example mySql IsDate function using a regular expression:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: sql;"&gt;CREATE DEFINER=`root`@`localhost` FUNCTION `IsDate`(var varchar(25)) RETURNS tinyint(4)&lt;br /&gt;DETERMINISTIC&lt;br /&gt;BEGIN&lt;br /&gt;/* 05/17/2009, 5/01/2009, 5/1/2009 */&lt;br /&gt;&lt;br /&gt;declare result tinyint;&lt;br /&gt;&lt;br /&gt;select  trim(var)&lt;br /&gt;&lt;br /&gt;REGEXP '^([1-9]|0[1-9]|1[012])/([1-9]|0[1-9]|[12][0-9]|3[01])/(19|20)[0-9][0-9]'&lt;br /&gt;&lt;br /&gt;into @result;&lt;br /&gt;&lt;br /&gt;return @result;&lt;br /&gt;END&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10158221-2400262696243249570?l=www.kriskrause.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/2400262696243249570/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=10158221&amp;postID=2400262696243249570' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/posts/default/2400262696243249570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/posts/default/2400262696243249570'/><link rel='alternate' type='text/html' href='http://www.kriskrause.com/2009/06/example-mysql-isdate-function.html' title='Example mySql IsDate Function'/><author><name>Kristofer Krause</name><uri>http://www.blogger.com/profile/00715084587222905919</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02868544994241265818'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10158221.post-864208760818166213</id><published>2009-04-08T11:22:00.012-04:00</published><updated>2009-04-08T12:02:39.003-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><title type='text'>MySql Connector .NET MySqlBulkLoader Example</title><content type='html'>Here is a MySqlBulkLoader example I quickly wrote to import 65,000 records into a mySql 5.1 database using the mySql Connector 5.2.5.  And yes, its fast as snot (the lead programmer at my first programming job out of college invented the term).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.red-gate.com/products/reflector/" target="_new"&gt;.NET Reflector&lt;/a&gt; helped me figure out the follow details:&lt;br /&gt;&lt;br /&gt;- the default FieldTerminator is "\t"&lt;br /&gt;- the default LineTerminator is "\n"&lt;br /&gt;- the default FieldQuotationCharacter is '\0'&lt;br /&gt;- the .Load() method both opens and closes the connection&lt;br /&gt;&lt;br /&gt;Also, the &lt;a href="http://dev.mysql.com/doc/refman/5.1/en/load-data.html" target="_new"&gt;mySql documentation&lt;/a&gt; obviously helped to explain a lot including the "\r\n" Win32 line terminator in my example (I used Excel to export the CSV).  The database user in this example needs "insert" permission.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.kriskrause.com/downloads/mySqlBulkLoader-example.zip" target="_new"&gt;Download the VB.NET, Sql, and CSV files here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10158221-864208760818166213?l=www.kriskrause.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/864208760818166213/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=10158221&amp;postID=864208760818166213' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/posts/default/864208760818166213'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/posts/default/864208760818166213'/><link rel='alternate' type='text/html' href='http://www.kriskrause.com/2009/04/mysql-connector-net-mysqlbulkloader.html' title='MySql Connector .NET MySqlBulkLoader Example'/><author><name>Kristofer Krause</name><uri>http://www.blogger.com/profile/00715084587222905919</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02868544994241265818'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10158221.post-5218776887387139036</id><published>2009-02-25T12:03:00.005-05:00</published><updated>2009-02-25T12:10:16.482-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='visual studio'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><title type='text'>Unit Testing ASP.NET App_Code</title><content type='html'>I learn something new every day.  Today, its the ability to &lt;a href="http://blogs.msdn.com/ejarvi/archive/2005/08/23/455215.aspx"&gt;Unit Test code in the App_Code folder&lt;/a&gt; using Visual Studio 2008 Professional.&lt;br /&gt;&lt;br /&gt;Most of the ASP.NET projects that I work on have their business logic contained in a separate assembly.  However, a recent smaller project has some business classes residing in the App_Code directory.&lt;br /&gt;&lt;br /&gt;Tip:  Just make sure you watch your dynamic port assignments.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10158221-5218776887387139036?l=www.kriskrause.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/5218776887387139036/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=10158221&amp;postID=5218776887387139036' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/posts/default/5218776887387139036'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/posts/default/5218776887387139036'/><link rel='alternate' type='text/html' href='http://www.kriskrause.com/2009/02/unit-testing-aspnet-appcode.html' title='Unit Testing ASP.NET App_Code'/><author><name>Kristofer Krause</name><uri>http://www.blogger.com/profile/00715084587222905919</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02868544994241265818'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10158221.post-1739912621019528200</id><published>2009-02-17T09:32:00.005-05:00</published><updated>2009-02-17T09:42:20.761-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='windows server'/><title type='text'>Disable the Shutdown Event Manager in Windows Server</title><content type='html'>Want to get rid of this screen (Shutdown Event Manager) in Windows Server 2003 and Windows Server 2008?&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.kriskrause.com/images/shutdown-server.jpg" alt="Shutdown Event Manager" &gt;&lt;br /&gt;&lt;br /&gt;Do this:  &lt;br /&gt;&lt;br /&gt;Start -&gt; Run -&gt; gpedit.msc&lt;br /&gt;&lt;br /&gt;Computer Configuration -&gt; Administrative Templates -&gt; System&lt;br /&gt;&lt;br /&gt;Disable "Display Shutdown Event Tracker"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10158221-1739912621019528200?l=www.kriskrause.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/1739912621019528200/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=10158221&amp;postID=1739912621019528200' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/posts/default/1739912621019528200'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/posts/default/1739912621019528200'/><link rel='alternate' type='text/html' href='http://www.kriskrause.com/2009/02/disable-shutdown-event-manager-in.html' title='Disable the Shutdown Event Manager in Windows Server'/><author><name>Kristofer Krause</name><uri>http://www.blogger.com/profile/00715084587222905919</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02868544994241265818'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10158221.post-2880593434365300463</id><published>2008-12-10T12:31:00.006-05:00</published><updated>2008-12-10T13:05:37.610-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vista'/><title type='text'>Sound Blaster Live! SB0200 with Vista</title><content type='html'>I was able to successfully have my Sound Blaster Live! SB0200 card recognized by Vista Home Premium SP2.  I read through this post &lt;a href="http://en.community.dell.com/forums/t/2938925.aspx"&gt;http://en.community.dell.com/forums/t/2938925.aspx&lt;/a&gt; and then I installed this driver from Dell &lt;a href="http://support.dell.com/support/downloads/download.aspx?c=us&amp;l=en&amp;s=gen&amp;releaseid=R69382&amp;fileid=90207"&gt;http://support.dell.com/support/downloads/download.aspx?c=us&amp;l=en&amp;s=gen&amp;releaseid=R69382&amp;fileid=90207&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Leading up to the solution was painful.  And unfortunately not for your average user.  Personally, I enjoy Vista.  I installed a legal copy of Vista Home Premium on an older Dell.  Hardware compatibility was the main issue.  My sound card and wireless USB (needed to purchase a PCI card) were the most painful and time consuming.  &lt;br /&gt;&lt;br /&gt;Vista is great (even better when you purchase it pre-installed).  Yeah I know... stating a favorable opinion of Vista is not mainstream or cool.  However, it gets the job done... and sometimes even better than my MacBook.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10158221-2880593434365300463?l=www.kriskrause.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/2880593434365300463/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=10158221&amp;postID=2880593434365300463' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/posts/default/2880593434365300463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/posts/default/2880593434365300463'/><link rel='alternate' type='text/html' href='http://www.kriskrause.com/2008/12/sound-blaster-live-sb0200.html' title='Sound Blaster Live! SB0200 with Vista'/><author><name>Kristofer Krause</name><uri>http://www.blogger.com/profile/00715084587222905919</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02868544994241265818'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10158221.post-4835712997690944178</id><published>2008-11-10T13:42:00.005-05:00</published><updated>2009-02-17T09:42:58.316-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='visual studio'/><title type='text'>Accessibility Consulting Project</title><content type='html'>Although the static (Flash, Html, and Javascript) project ran using Apache and Linux I still was able to utilize Visual Studio 2008 for accessibility guidance.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10158221-4835712997690944178?l=www.kriskrause.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/4835712997690944178/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=10158221&amp;postID=4835712997690944178' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/posts/default/4835712997690944178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/posts/default/4835712997690944178'/><link rel='alternate' type='text/html' href='http://www.kriskrause.com/2008/11/accessibility-consulting-project.html' title='Accessibility Consulting Project'/><author><name>Kristofer Krause</name><uri>http://www.blogger.com/profile/00715084587222905919</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02868544994241265818'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10158221.post-7889941628379586950</id><published>2008-10-02T14:05:00.003-04:00</published><updated>2008-12-10T13:05:37.620-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><title type='text'>Using Microsoft ADO.NET Entity Framework with MySQL</title><content type='html'>Unfortunately, this week's Using Microsoft ADO.NET Entity Framework with MySQL Webinar is being postponed to Tuesday November 4, 2008. Myself and many others are looking forward to some (if not all) entity framework support.  It seems that I check the mySQL dev forum daily for updates.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://www.crlab.com/products/mysqlnet/"&gt;myDirect.NET&lt;/a&gt; product offers support for the ADO.NET Entity Framework with a commercial license fee.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10158221-7889941628379586950?l=www.kriskrause.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/7889941628379586950/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=10158221&amp;postID=7889941628379586950' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/posts/default/7889941628379586950'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/posts/default/7889941628379586950'/><link rel='alternate' type='text/html' href='http://www.kriskrause.com/2008/10/using-microsoft-adonet-entity-framework.html' title='Using Microsoft ADO.NET Entity Framework with MySQL'/><author><name>Kristofer Krause</name><uri>http://www.blogger.com/profile/00715084587222905919</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02868544994241265818'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10158221.post-7356690074814037630</id><published>2008-08-07T10:36:00.004-04:00</published><updated>2008-12-10T13:05:37.626-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><title type='text'>Visual Studio 2008 Justification</title><content type='html'>There are two primary justifications for my company's latest purchase of Visual Studio 2008 Professional -&lt;br /&gt;&lt;br /&gt;1.  The ability to "target" previous .NET versions.&lt;br /&gt;2.  The integrated unit testing.&lt;br /&gt;&lt;br /&gt;While we still have not setup the automatic builds (command line)... and we still utilize NAnt... the integrated unit testing feature of Visual Studio 2008 rocks.  Sure there are alternatives (we still have some projects with NUnit testing)... and various mocking frameworks, however the ability to "right click" create unit test/private accessor is very productive for us.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10158221-7356690074814037630?l=www.kriskrause.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/7356690074814037630/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=10158221&amp;postID=7356690074814037630' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/posts/default/7356690074814037630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/posts/default/7356690074814037630'/><link rel='alternate' type='text/html' href='http://www.kriskrause.com/2008/08/visual-studio-2008-justification.html' title='Visual Studio 2008 Justification'/><author><name>Kristofer Krause</name><uri>http://www.blogger.com/profile/00715084587222905919</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02868544994241265818'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10158221.post-5345192766609348226</id><published>2008-07-23T15:51:00.007-04:00</published><updated>2009-11-21T19:51:06.331-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><title type='text'>VB.NET InternalsVisibleTo</title><content type='html'>Unfortunately, the InternalsVisibleTo attribute does not work with the .NET 2.0 Framework for VB.NET. However, I just installed Visual Web Developer 2008 Express SP1 Beta and it works! Thanks Microsoft for making my NUnit testing a little easier (and cleaner).&lt;br /&gt;&lt;br /&gt;To reproduce:&lt;br /&gt;&lt;br /&gt;Create a VB.NET class library named ClassLibrary1. Add a single class with only a friend constructor. Add the following attribute to AssemblyInfo.vb:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: vbnet;"&gt;Assembly: System.Runtime.CompilerServices.InternalsVisibleTo("ClassLibrary2")&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Add another VB.NET class library named ClassLibrary2. Add a project reference to ClassLibrary1. Verify that you are able to construct an instance of the above class.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10158221-5345192766609348226?l=www.kriskrause.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/5345192766609348226/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=10158221&amp;postID=5345192766609348226' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/posts/default/5345192766609348226'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/posts/default/5345192766609348226'/><link rel='alternate' type='text/html' href='http://www.kriskrause.com/2008/07/vbnet-internalsvisibleto.html' title='VB.NET InternalsVisibleTo'/><author><name>Kristofer Krause</name><uri>http://www.blogger.com/profile/00715084587222905919</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02868544994241265818'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10158221.post-8755235729657100894</id><published>2008-06-03T13:36:00.007-04:00</published><updated>2008-12-10T13:05:37.646-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><title type='text'>mySql ASP.NET Membership and Role Provider</title><content type='html'>The mySql.Web.dll is a great addition to the mySql Connector for .NET.  In order to utilize one must create (and use) a mySql user (localhost) with select, insert, update, delete, create, drop, and alter privileges.&lt;br /&gt;&lt;br /&gt;Quickly running ASP.NET Configuration Web Site Administration Tool helps to set up and initialize all of the tables.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10158221-8755235729657100894?l=www.kriskrause.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/8755235729657100894/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=10158221&amp;postID=8755235729657100894' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/posts/default/8755235729657100894'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/posts/default/8755235729657100894'/><link rel='alternate' type='text/html' href='http://www.kriskrause.com/2008/06/mysql-aspnet-membership-and-role.html' title='mySql ASP.NET Membership and Role Provider'/><author><name>Kristofer Krause</name><uri>http://www.blogger.com/profile/00715084587222905919</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02868544994241265818'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10158221.post-3187769843813048185</id><published>2008-03-18T12:33:00.003-04:00</published><updated>2008-12-10T13:05:37.647-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql server'/><title type='text'>Finding Primary Key Violations</title><content type='html'>Recently I've been processing lots of legacy DBase files into Sql Server 2005 via SqlBulkCopy.&lt;br /&gt;&lt;br /&gt;However, before I import the records (tens of thousands) there is a need to find, then handle the legacy DBase records that will cause a Sql Server primary key violation (if any).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.gaydaware.com"&gt;Karen Gayda's&lt;/a&gt; solution works like a charm:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.sqlteam.com/article/anticipating-primary-key-violations"&gt;http://www.sqlteam.com/article/anticipating-primary-key-violations&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;IMPORTANT: SqlBulkCopy has a column mapper feature.  However, only key columns should be included in select parameter - @vcSelectStatement. If source table columns are named differently than in the target then they must be aliased with the same name as the target. These restrictions were necessary to make the procedure generic.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10158221-3187769843813048185?l=www.kriskrause.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.sqlteam.com/article/anticipating-primary-key-violations' title='Finding Primary Key Violations'/><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/3187769843813048185/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=10158221&amp;postID=3187769843813048185' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/posts/default/3187769843813048185'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/posts/default/3187769843813048185'/><link rel='alternate' type='text/html' href='http://www.kriskrause.com/2008/03/finding-primary-key-violations.html' title='Finding Primary Key Violations'/><author><name>Kristofer Krause</name><uri>http://www.blogger.com/profile/00715084587222905919</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02868544994241265818'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10158221.post-3722514677929701302</id><published>2008-01-08T15:08:00.001-05:00</published><updated>2008-12-10T13:05:37.647-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><title type='text'>Efficient Role-Based Authorization in ASP.NET</title><content type='html'>Efficient Role-Based Authorization in ASP.NET by Fritz Onion and Craig Andera is a good article.  I know its a bit "old", but its still relevant and worth the read for any serious ASP.NET developer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10158221-3722514677929701302?l=www.kriskrause.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.pluralsight.com/articlecontent/efficientRoleBasedAuthentication.pdf' title='Efficient Role-Based Authorization in ASP.NET'/><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/3722514677929701302/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=10158221&amp;postID=3722514677929701302' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/posts/default/3722514677929701302'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/posts/default/3722514677929701302'/><link rel='alternate' type='text/html' href='http://www.kriskrause.com/2008/01/efficient-role-based-authorization-in.html' title='Efficient Role-Based Authorization in ASP.NET'/><author><name>Kristofer Krause</name><uri>http://www.blogger.com/profile/00715084587222905919</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02868544994241265818'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10158221.post-6574041740559974577</id><published>2007-09-06T09:41:00.002-04:00</published><updated>2009-11-21T19:52:44.493-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>Google Reader Search Capability</title><content type='html'>I logged into my Google Reader account and noticed the new search feature!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10158221-6574041740559974577?l=www.kriskrause.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/6574041740559974577/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=10158221&amp;postID=6574041740559974577' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/posts/default/6574041740559974577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/posts/default/6574041740559974577'/><link rel='alternate' type='text/html' href='http://www.kriskrause.com/2007/09/google-reader-search-capability.html' title='Google Reader Search Capability'/><author><name>Kristofer Krause</name><uri>http://www.blogger.com/profile/00715084587222905919</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02868544994241265818'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10158221.post-4359616587980633651</id><published>2007-07-24T14:11:00.002-04:00</published><updated>2009-11-21T19:54:02.075-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><title type='text'>Visual Studio 2005 on Mac OS X</title><content type='html'>Utilizing Parallels 3.0 &lt;a href="http://www.parallels.com/en/products/desktop/"&gt;http://www.parallels.com/en/products/desktop/&lt;/a&gt; I am able to run Visual Studio 2005 on my Macbook (Mac OS X). Parallels Coherence makes it seem that I am running Visual Studio right inside my Mac desktop window instead of a separate virtualized window.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Here are some larger screenshots:&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.kriskrause.com/images/mac-vs-net-2005.jpg"&gt;http://www.kriskrause.com/images/mac-vs-net-2005.jpg&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.kriskrause.com/images/mac-vs-net-2005-widgets.jpg"&gt;http://www.kriskrause.com/images/mac-vs-net-2005-widgets.jpg&lt;/a&gt; (Widgets Overlay)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10158221-4359616587980633651?l=www.kriskrause.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/4359616587980633651/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=10158221&amp;postID=4359616587980633651' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/posts/default/4359616587980633651'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/posts/default/4359616587980633651'/><link rel='alternate' type='text/html' href='http://www.kriskrause.com/2007/07/visual-studio-2005-on-mac-os-x.html' title='Visual Studio 2005 on Mac OS X'/><author><name>Kristofer Krause</name><uri>http://www.blogger.com/profile/00715084587222905919</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02868544994241265818'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10158221.post-5254154150064533734</id><published>2007-07-24T13:36:00.001-04:00</published><updated>2008-12-10T13:05:37.650-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mono'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><title type='text'>Uninstall Mono on Mac OS X</title><content type='html'>&lt;p&gt;To uninstall Mono on OS X utilize the uninstallMono.sh script.  Where is it?  How do you get it?&lt;/p&gt;&lt;p&gt;Utilize Finder to browse to /Library/Receipts.  View the package contents of Contents/Resources/MonoFramework.pkg.&lt;/p&gt;&lt;p&gt;Drag a copy of uninstallMono.sh to the desktop. Open a Terminal window.  Then cd desktop and run: sudo ./uninstallMono.sh and enter your password. &lt;/p&gt;Mono on Mac OS X is then uninstalled (bin, Frameworks, etc.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10158221-5254154150064533734?l=www.kriskrause.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/5254154150064533734/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=10158221&amp;postID=5254154150064533734' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/posts/default/5254154150064533734'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/posts/default/5254154150064533734'/><link rel='alternate' type='text/html' href='http://www.kriskrause.com/2007/07/uninstall-mono-on-mac-os-x.html' title='Uninstall Mono on Mac OS X'/><author><name>Kristofer Krause</name><uri>http://www.blogger.com/profile/00715084587222905919</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02868544994241265818'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10158221.post-111330946537244773</id><published>2005-04-12T08:29:00.002-04:00</published><updated>2008-12-10T13:05:37.650-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><title type='text'>Default ASP.NET Submit Button</title><content type='html'>Here are two ways to solve the problem of having multiple textboxes and multiple buttons on a form.  Each button corresponds to a textbox.  When the user enters something in the textbox and presses the enter key... we want the appropriate button to fire.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.metabuilders.com/Tools/DefaultButtons.aspx"&gt;http://www.metabuilders.com/Tools/DefaultButtons.aspx&lt;/a&gt;&lt;br /&gt;&lt;a href="http://weblogs.asp.net/rajbk/archive/2003/12/11/43023.aspx"&gt;http://weblogs.asp.net/rajbk/archive/2003/12/11/43023.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10158221-111330946537244773?l=www.kriskrause.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/111330946537244773/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=10158221&amp;postID=111330946537244773' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/posts/default/111330946537244773'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/posts/default/111330946537244773'/><link rel='alternate' type='text/html' href='http://www.kriskrause.com/2005/04/default-aspnet-submit-button.html' title='Default ASP.NET Submit Button'/><author><name>Kristofer Krause</name><uri>http://www.blogger.com/profile/00715084587222905919</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02868544994241265818'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10158221.post-111093248508007523</id><published>2005-03-15T19:19:00.001-05:00</published><updated>2008-12-10T13:05:37.651-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>EPIC 2014</title><content type='html'>In the year 2014, The New York Times has gone offline.&lt;br /&gt;&lt;br /&gt;The Fourth Estate's fortunes have waned.&lt;br /&gt;&lt;br /&gt;What happened to the news?&lt;br /&gt;&lt;br /&gt;And what is EPIC?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10158221-111093248508007523?l=www.kriskrause.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.broom.org/epic/' title='EPIC 2014'/><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/111093248508007523/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=10158221&amp;postID=111093248508007523' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/posts/default/111093248508007523'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/posts/default/111093248508007523'/><link rel='alternate' type='text/html' href='http://www.kriskrause.com/2005/03/epic-2014.html' title='EPIC 2014'/><author><name>Kristofer Krause</name><uri>http://www.blogger.com/profile/00715084587222905919</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02868544994241265818'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10158221.post-110787762847421640</id><published>2005-02-08T10:36:00.002-05:00</published><updated>2009-11-21T19:55:35.687-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><title type='text'>Printing a Remote Document or Url Using C#</title><content type='html'>The following code enables a local machine to print a remote document or Url.  One example would be a desktop application that needs to print a remote PDF or a Html producing web page.&lt;br /&gt;&lt;br /&gt;The simple example downloads the file locally in order to print using the default printer.  Sure there might be a better way to do this... and the code needs to be modified to handle "file not found", "url not found", and "unable to connect" exceptions in case a cable is loose.  Cable?  Who uses cable?  It's all wireless nowadays!&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: csharp;"&gt;using System;&lt;br /&gt;using System.Diagnostics;&lt;br /&gt;using System.Net;&lt;br /&gt;&lt;br /&gt;namespace ShellPrint&lt;br /&gt;{&lt;br /&gt;class CMain&lt;br /&gt;{&lt;br /&gt;[STAThread]&lt;br /&gt;static void Main(string[] args)&lt;br /&gt;{&lt;br /&gt;string lfile, file, ext;&lt;br /&gt;Process proc = null;&lt;br /&gt;WebClient client = null;&lt;br /&gt;&lt;br /&gt;try&lt;br /&gt;{&lt;br /&gt;if (args.Length &lt; 2) throw new ArgumentException("Invalid arguments passed.");&lt;br /&gt;&lt;br /&gt;file = args[1].Trim();&lt;br /&gt;ext = args[0].Trim();&lt;br /&gt;&lt;br /&gt;client = new WebClient();&lt;br /&gt;&lt;br /&gt;lfile = @"c:\" + DateTime.Now.Ticks + "." + ext;&lt;br /&gt;&lt;br /&gt;Console.WriteLine("Downloading: {0}", file);&lt;br /&gt;&lt;br /&gt;client.DownloadFile(file, lfile);&lt;br /&gt;&lt;br /&gt;Console.WriteLine("Saving: {0}", file);&lt;br /&gt;&lt;br /&gt;proc = new Process();&lt;br /&gt;&lt;br /&gt;proc.StartInfo.FileName = lfile; &lt;br /&gt;proc.StartInfo.Verb = "Print";&lt;br /&gt;proc.StartInfo.CreateNoWindow = true;&lt;br /&gt;&lt;br /&gt;Console.WriteLine("Printing: {0}", lfile);&lt;br /&gt;&lt;br /&gt;proc.Start();&lt;br /&gt;}&lt;br /&gt;catch (Exception e)&lt;br /&gt;{&lt;br /&gt;Console.WriteLine(e);&lt;br /&gt;}&lt;br /&gt;finally&lt;br /&gt;{&lt;br /&gt;Console.WriteLine("Done and done.");&lt;br /&gt;Console.ReadLine();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10158221-110787762847421640?l=www.kriskrause.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/110787762847421640/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=10158221&amp;postID=110787762847421640' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/posts/default/110787762847421640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/posts/default/110787762847421640'/><link rel='alternate' type='text/html' href='http://www.kriskrause.com/2005/02/printing-remote-document-or-url-using.html' title='Printing a Remote Document or Url Using C#'/><author><name>Kristofer Krause</name><uri>http://www.blogger.com/profile/00715084587222905919</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02868544994241265818'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10158221.post-110738302178468200</id><published>2005-02-02T17:17:00.002-05:00</published><updated>2009-11-21T19:56:15.714-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><title type='text'>Accessing iTunes With C#</title><content type='html'>The following example dumps your entire &lt;a href="http://www.apple.com/itunes/"&gt;iTunes&lt;/a&gt; library to the console.  You need to reference the COM iTunes 1.2 Type library.  Currently I am running iTunes version 4.7.1.30.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: csharp;"&gt;using System;&lt;br /&gt;&lt;br /&gt;namespace PlayListExample&lt;br /&gt;{&lt;br /&gt;class CMain&lt;br /&gt;{&lt;br /&gt;[STAThread]&lt;br /&gt;static void Main(string[] args)&lt;br /&gt;{&lt;br /&gt;iTunesLib.IiTunes app = null;&lt;br /&gt;&lt;br /&gt;try&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;app = new iTunesLib.iTunesAppClass();&lt;br /&gt;&lt;br /&gt;foreach (iTunesLib.IITTrack track in app.LibraryPlaylist.Tracks)&lt;br /&gt;{&lt;br /&gt;Console.WriteLine("Artist: {0}\nSong: {1}\nGenre: {2}\n", track.Artist, track.Name, track.Genre);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;catch (Exception e)&lt;br /&gt;{&lt;br /&gt;Console.WriteLine(e);&lt;br /&gt;}&lt;br /&gt;finally&lt;br /&gt;{&lt;br /&gt;app.Quit();&lt;br /&gt;&lt;br /&gt;app = null;&lt;br /&gt;&lt;br /&gt;Console.ReadLine();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10158221-110738302178468200?l=www.kriskrause.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/110738302178468200/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=10158221&amp;postID=110738302178468200' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/posts/default/110738302178468200'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/posts/default/110738302178468200'/><link rel='alternate' type='text/html' href='http://www.kriskrause.com/2005/02/accessing-itunes-with-c.html' title='Accessing iTunes With C#'/><author><name>Kristofer Krause</name><uri>http://www.blogger.com/profile/00715084587222905919</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02868544994241265818'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10158221.post-110737457038009161</id><published>2005-02-02T15:00:00.001-05:00</published><updated>2008-12-10T13:05:37.654-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><title type='text'>Parsing dBase .DBF to .CSV Using C# and VB.NET</title><content type='html'>Per a &lt;a href="http://www.njmsdev.org/"&gt;New Jersey Microsoft Developer's Group&lt;/a&gt; message board request I created a sample console application that parses a .DBF file and creates an Excel usable .CSV file.  Zero magic if you take advantage of the System.Data.Odbc namespace.&lt;br /&gt;&lt;br /&gt;The command line syntax is:&lt;br /&gt;&lt;br /&gt;FPParse.exe [table name] [output dir]&lt;br /&gt;FPParse.exe canada c:&lt;br /&gt;&lt;br /&gt;The generated .CSV file is just as good as an .XLS file.  For fancy .XLS features and formatting I suggest modifying my code to utilize Excel COM Interop.&lt;br /&gt;&lt;br /&gt;The C# source code is found &lt;a href="http://www.geocities.com/chipwaiter"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The VB.NET source code is found &lt;a href="http://www.geocities.com/chipwaiter"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10158221-110737457038009161?l=www.kriskrause.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/110737457038009161/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=10158221&amp;postID=110737457038009161' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/posts/default/110737457038009161'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/posts/default/110737457038009161'/><link rel='alternate' type='text/html' href='http://www.kriskrause.com/2005/02/parsing-dbase-dbf-to-csv-using-c-and.html' title='Parsing dBase .DBF to .CSV Using C# and VB.NET'/><author><name>Kristofer Krause</name><uri>http://www.blogger.com/profile/00715084587222905919</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02868544994241265818'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10158221.post-110718316719888330</id><published>2005-01-31T09:52:00.001-05:00</published><updated>2008-12-10T13:05:37.655-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><title type='text'>DataView vs. DataTable</title><content type='html'>Yes, I still pull my hair out over DataView versus DataTable every once in a while.&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;using System;&lt;br /&gt;using System.Collections;&lt;br /&gt;using System.Data;&lt;br /&gt;&lt;br /&gt;public class MyTestClass&lt;br /&gt;{&lt;br /&gt; public static void Main()&lt;br /&gt; {&lt;br /&gt;  DataTable dt = new DataTable();&lt;br /&gt;  &lt;br /&gt;  try&lt;br /&gt;  {&lt;br /&gt;   DataColumn col1 = new DataColumn();&lt;br /&gt;   col1.DataType = System.Type.GetType("System.Int32");&lt;br /&gt;   col1.ColumnName = "EmployeeID";&lt;br /&gt;   &lt;br /&gt;   dt.Columns.Add(col1);&lt;br /&gt;   &lt;br /&gt;   DataColumn col2 = new DataColumn();&lt;br /&gt;   col2.DataType = System.Type.GetType("System.String");&lt;br /&gt;   col2.ColumnName = "LastName";&lt;br /&gt;   &lt;br /&gt;   dt.Columns.Add(col2);&lt;br /&gt;   &lt;br /&gt;   dt.Rows.Add(new Object[] {1, "Covell"});&lt;br /&gt;   dt.Rows.Add(new Object[] {2, "Schaefer"});&lt;br /&gt;   dt.Rows.Add(new Object[] {3, "Krause"});&lt;br /&gt;   dt.Rows.Add(new Object[] {4, "Meloskie"});&lt;br /&gt;   dt.Rows.Add(new Object[] {5, "Vader"});&lt;br /&gt;   &lt;br /&gt;   MyDataView myView = new MyDataView(dt, "EmployeeID &lt; 3");&lt;br /&gt;  &lt;br /&gt;   Console.WriteLine("Filter row count: {0}", myView.CurrentFilterCount);&lt;br /&gt;   Console.WriteLine("Row count: {0}", myView.CurrentCount);&lt;br /&gt;  }&lt;br /&gt;  catch (Exception e)&lt;br /&gt;  {&lt;br /&gt;   Console.WriteLine(e);&lt;br /&gt;  }&lt;br /&gt;  finally&lt;br /&gt;  {&lt;br /&gt;   Console.WriteLine("Done and done.");&lt;br /&gt;   Console.ReadLine();&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public class MyDataView : DataView&lt;br /&gt;{&lt;br /&gt; public MyDataView(DataTable dt, string filter) : base(dt)&lt;br /&gt; {&lt;br /&gt;  this.RowFilter = filter;&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; public int CurrentFilterCount&lt;br /&gt; {&lt;br /&gt;  get { return this.Count; }&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; public int CurrentCount&lt;br /&gt; {&lt;br /&gt;  get { return this.Table.Rows.Count; }&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10158221-110718316719888330?l=www.kriskrause.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/110718316719888330/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=10158221&amp;postID=110718316719888330' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/posts/default/110718316719888330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/posts/default/110718316719888330'/><link rel='alternate' type='text/html' href='http://www.kriskrause.com/2005/01/dataview-vs-datatable.html' title='DataView vs. DataTable'/><author><name>Kristofer Krause</name><uri>http://www.blogger.com/profile/00715084587222905919</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02868544994241265818'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10158221.post-110631499128760695</id><published>2005-01-21T08:33:00.002-05:00</published><updated>2008-12-10T13:05:37.655-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comcast'/><title type='text'>Comcast and Optimum Online Intentional Outage Victim</title><content type='html'>It appears that I am once again an "intentional" outage victim.  My &lt;a href="http://www.optonline.net/"&gt;Optimum Online&lt;/a&gt; broadband went out last night around 7 PM.  I double checked the cable modem's Coax and Cat5 inputs... there was no apparent problem.  I even inspected the outside box.  Finally, I called Cablevision's customer support.  The technician told me to unscrew the Coax cable connection... then screw it back in behind the cable modem.  As I was doing this ridiculous solution, I could hear the customer support person performing "something" on the other end of the phone.  Bingo.  It worked.&lt;br /&gt;&lt;br /&gt;I had a similar experience about a year ago with &lt;a href="http://www.comcast.net"&gt;Comcast&lt;/a&gt;.  Comcast intentionally went into the basement of my apartment building and disconnected my broadband.  After a day without broadband (remember I work from home... so I had to painfully use dialup) a Comcast "worker bee" was dispatched to my apartment.  It only took him three seconds to reconnect me.  My interrogation (which consisted of offering a glass of water, iced tea, juice, or beer) resulted in his confession that Comcast intentionally disconnects peoples broadband so that they can track the entire support process (phone call, phone support, "worker bee dispatched", problem resolution, annoying follow up phone call, optional survey).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10158221-110631499128760695?l=www.kriskrause.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/110631499128760695/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=10158221&amp;postID=110631499128760695' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/posts/default/110631499128760695'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10158221/posts/default/110631499128760695'/><link rel='alternate' type='text/html' href='http://www.kriskrause.com/2005/01/comcast-and-optimum-online-intentional.html' title='Comcast and Optimum Online Intentional Outage Victim'/><author><name>Kristofer Krause</name><uri>http://www.blogger.com/profile/00715084587222905919</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02868544994241265818'/></author><thr:total>0</thr:total></entry></feed>