<?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:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-14404010</id><updated>2026-07-24T02:01:37.968-04:00</updated><category term="LINQ"/><category term="SQL Server"/><category term="Basics.Net"/><category term="database"/><category term="GLUGnet"/><category term="Presentations"/><category term="validation"/><title type='text'>JBK.Net</title><subtitle type='html'>Promoting application development with the Microsoft .Net platform.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://jbknet.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14404010/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://jbknet.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/14404010/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Joe Kunk</name><uri>http://www.blogger.com/profile/08512894287202788232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>69</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-14404010.post-1279609777183968260</id><published>2020-11-16T21:18:00.000-05:00</published><updated>2020-11-16T21:18:15.111-05:00</updated><title type='text'>SQLPlus.NET - the effort-less Microsoft.NET ORM for SQL Server</title><content type='html'>&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;i&gt;Too busy to read my post? Go to&amp;nbsp;&lt;a href=&quot;https://sqlplusweb.azurewebsites.net/&quot;&gt;SQL+ .NET&lt;/a&gt; and check my new favorite ORM for the Microsoft.NET C# language. I am not paid to promote this tool - I just think it it awesome and want to share my discovery.&lt;/i&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;When working with SQL Server in a Microsoft .NET application, I want to stay focused on solving the business challenge at hand; I want to spend as little time as possible writing the plumbing to accomplish needed work with the database. I finally found an amazing tool that does just that!&amp;nbsp; This is the first of a series of blog posts to show just how easy and productive database interactions in Microsoft C#.&lt;/span&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Over the years I have worked with Entity Framework (EF) and other ORMs such as Dapper, NHibernate, EntitySpaces.NET, LLBLGen Pro, and in it&#39;s heyday, my previous favorite, LINQ to SQL. I don&#39;t want to get into an argument whether these are true ORMs or not - I am using the term ORM loosely to mean any software tool or library that allows me to accomplish tasks in code with SQL Server without writing ADO.NET that utilizes datasets and data tables.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;I was really disappointed when LINQ to SQL was discontinued in favor of Entity Framework. It was simple and intuitive. I know that many developers use EF on a regular basis and may be happy with it but I have always found it difficult to use. Perhaps you have struggled with it too; I certainly hope I am not the only one. 😔&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Most developers that work with SQL Server use tools like SQL Server Management Studio (SSMS) or Visual Studio Code to write and test their queries before placing them in code. What if that was (almost) all you had to do to get that query to run in your application?&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;This is where&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;a href=&quot;https://sqlplusweb.azurewebsites.net/&quot;&gt;SQL+.NET&lt;/a&gt;&amp;nbsp;shines! I can take the T-SQL statement I have just written, add some annotations as comments to the T-SQL statements, place that T-SQL in my .NET project as a .sql file, and then in one step generate all the code I need to call it and send the inputs and&amp;nbsp; receive the status and results as strongly-typed .NET objects. In my next post, I will show just how easy it is. I think you will be pleasantly surprised.&lt;br /&gt;&lt;br /&gt;Hope that helps.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Joe&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jbknet.blogspot.com/feeds/1279609777183968260/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/14404010/1279609777183968260' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14404010/posts/default/1279609777183968260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14404010/posts/default/1279609777183968260'/><link rel='alternate' type='text/html' href='http://jbknet.blogspot.com/2020/11/sqlplusnet-effort-less-microsoftnet-orm.html' title='SQLPlus.NET - the effort-less Microsoft.NET ORM for SQL Server'/><author><name>Joe Kunk</name><uri>http://www.blogger.com/profile/08512894287202788232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14404010.post-2998855092406069418</id><published>2020-10-20T08:54:00.000-04:00</published><updated>2020-10-20T08:54:05.246-04:00</updated><title type='text'>I&#39;m Back!</title><content type='html'>&lt;span style=&quot;font-family: arial;&quot;&gt;Dear readers:&lt;/span&gt;&lt;div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;After years of not blogging, I have decided to return to share my experiences and help others where I can.&lt;/span&gt;&lt;div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;I stopped blogging when I became a columnist for Visual Studio magazine. Why write for free when I could get paid for it? I wrote over 30 columns and it was a great experience, but eventually the demands of a monthly publication deadline became an issue. I retired from writing and gave up my Microsoft MVP status and became a &quot;normal&quot; person, or a reasonable facsimile of one.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Bottom line - I miss sharing my experiences so I am back. The final nudge came when I found a great .NET tool that really saves me a ton of time and I want to get the word out on that. So read my next post to find out what it is.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Joe&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jbknet.blogspot.com/feeds/2998855092406069418/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/14404010/2998855092406069418' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14404010/posts/default/2998855092406069418'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14404010/posts/default/2998855092406069418'/><link rel='alternate' type='text/html' href='http://jbknet.blogspot.com/2020/10/im-back.html' title='I&#39;m Back!'/><author><name>Joe Kunk</name><uri>http://www.blogger.com/profile/08512894287202788232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14404010.post-6146476430599555280</id><published>2012-03-17T18:17:00.001-04:00</published><updated>2012-03-17T18:17:05.275-04:00</updated><title type='text'>VMWare Guest OS Won’t Connect to Internet–How I fixed it</title><content type='html'>&lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;I use VMWare Workstation to host virtual machines (VM) for writing my articles.&amp;#160; I make sure to use a VM that has only the software that I really need, to eliminate side effects that could skew the behavior of the software I am writing about.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;Some time ago, I started having the problem that I could not get the Windows 7 Professional guest OS to connect to the internet inside the VM. Nothing worked. I tried NAT, bridged, bridged with copied physical adapter settings. I reset the Windows Firewall, I turned off the Windows firewall, I ran network diagnostics.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;I searched the Internet for a solution but found nothing particularly helpful. &lt;font face=&quot;Arial&quot;&gt;I was spending precious time I should have been writing, on frustratingly unsuccessful attempts to solve this problem. I am running VMWare Workstation version 7.1.5 build-491717.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;I worked around it by downloading files on the host laptop and putting them in a shared folder that the VM could see. For applications that required Internet access, I worked on the bare metal of my laptop but I really wanted the isolation of the VM.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;Today I realized the bridged connection was bridging to my unconnected ethernet port and not my wireless adapter. There is no way to specify what to bridge to in the VM settings but I found the Virtual Network Editor utility in the VMWare application folder on the host laptop. It has an option to specify which device the Bridge will connect to.&amp;#160; I set it to bridge to my wireless adapter and now I have Internet access in all my VMWare VMs without any issue. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://lh4.ggpht.com/-Gw9FgZlHamI/T2UNXHTejcI/AAAAAAAABGA/CDw3zTR2C18/s1600-h/VMWare%252520Virtual%252520Netwok%252520Editor%25255B3%25255D.png&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;VMWare Virtual Netwok Editor&quot; border=&quot;0&quot; alt=&quot;VMWare Virtual Netwok Editor&quot; src=&quot;http://lh4.ggpht.com/-WYh-aSyqT_w/T2UNYGt6mFI/AAAAAAAABGI/8SKeX0I810k/VMWare%252520Virtual%252520Netwok%252520Editor_thumb%25255B1%25255D.png?imgmax=800&quot; width=&quot;429&quot; height=&quot;390&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;I post this for others that may be experiencing the same issue.&amp;#160; If you found this post helpful, please add a comment to that effect.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;Joe Kunk      &lt;br /&gt;Microsoft MVP VB       &lt;br /&gt;Okemos, MI USA&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;&amp;#160;&lt;/font&gt;&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://jbknet.blogspot.com/feeds/6146476430599555280/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/14404010/6146476430599555280' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14404010/posts/default/6146476430599555280'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14404010/posts/default/6146476430599555280'/><link rel='alternate' type='text/html' href='http://jbknet.blogspot.com/2012/03/vmware-guest-os-wont-connect-to.html' title='VMWare Guest OS Won’t Connect to Internet–How I fixed it'/><author><name>Joe Kunk</name><uri>http://www.blogger.com/profile/08512894287202788232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-WYh-aSyqT_w/T2UNYGt6mFI/AAAAAAAABGI/8SKeX0I810k/s72-c/VMWare%252520Virtual%252520Netwok%252520Editor_thumb%25255B1%25255D.png?imgmax=800" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14404010.post-6006572316451129412</id><published>2011-10-11T23:44:00.001-04:00</published><updated>2011-10-11T23:44:32.906-04:00</updated><title type='text'>A CLR Alternative to the SQL Server ISNUMERIC function</title><content type='html'>&lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;My article on a better CLR alternative to the SQL Server IsNumeric() function just published in Visual Studio Magazine. &lt;/font&gt;&lt;a title=&quot;http://visualstudiomagazine.com/articles/2011/10/11/a-clr-alternative-to-isnumeric.aspx&quot; href=&quot;http://visualstudiomagazine.com/articles/2011/10/11/a-clr-alternative-to-isnumeric.aspx&quot;&gt;&lt;font face=&quot;Arial&quot;&gt;http://visualstudiomagazine.com/articles/2011/10/11/a-clr-alternative-to-isnumeric.aspx&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;I hope you find it useful.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;Joe Kunk     &lt;br /&gt;Microsoft MVP Visual Basic      &lt;br /&gt;Okemos, MI USA      &lt;br /&gt;October 2011&lt;/font&gt;&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://jbknet.blogspot.com/feeds/6006572316451129412/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/14404010/6006572316451129412' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14404010/posts/default/6006572316451129412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14404010/posts/default/6006572316451129412'/><link rel='alternate' type='text/html' href='http://jbknet.blogspot.com/2011/10/clr-alternative-to-sql-server-isnumeric.html' title='A CLR Alternative to the SQL Server ISNUMERIC function'/><author><name>Joe Kunk</name><uri>http://www.blogger.com/profile/08512894287202788232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14404010.post-4576991660015804226</id><published>2011-02-24T13:37:00.001-05:00</published><updated>2011-02-24T13:42:02.383-05:00</updated><title type='text'>Programmatically Changing the XAML of a WPF Control</title><content type='html'>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;Despite many years as a Windows Forms developer, I am a beginner at writing software in Windows Presentation Foundation (WPF).&amp;#160; Most project requests I receive are for thin client web-based solutions.&amp;#160; I have not had a request for a desktop application that really required the advanced visual interactivity of WPF. That combined with the limited ability to use the Windows Forms controls that I know so well has kept me out of WPF.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;I am now prototyping my first WPF application and feeling appropriately lost as I try to do things that I know that WPF can do but I have no inkling of how to accomplish.&amp;#160; I actually enjoy learning new technologies so I am not complaining, but I am.&amp;#160; You know what I mean.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;I have a StackPanel as the content of a tab control panel at the right side of my main page.&amp;#160; That StackPanel will host of contents of the appropriate UserControl StackPanel based on which option is selected on the main page.&amp;#160; This allows the tab panel to change dynamically based on which left side-panel label is clicked. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;The code-behind that worked to do this is below.&amp;#160; Before I get flamed, I realize that in a production application I would be using the MVVM or MVP pattern and I would not do it this way. But this is just a quick demo and I just want to illustrate the effect.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;Project_Approval_Data is the name of the UserControl that has the content to appear in the tab control panel when the “Project Approval” TextBlock is clicked.&amp;#160; spContent is the name of the StackPanel has has the desired content; it is the same name in all the UserControls.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;I am using Visual Studio 2010 Premium and .Net 4.0 Client Profile framework. I appreciate any comments showing a better way.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;Yes, this particular project is being done in C# at the customer’s request.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size=&quot;3&quot; face=&quot;Tahoma&quot;&gt;Project_Approval_Data project_Approval_Data =      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; new Project_Approval_Data();&lt;/font&gt;&lt;font size=&quot;3&quot; face=&quot;Tahoma&quot;&gt;     &lt;br /&gt;string spXAML =       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; XamlWriter.Save(project_Approval_Data.spContent);      &lt;br /&gt;StackPanel spSource = (StackPanel)XamlReader.Parse(spXAML);      &lt;br /&gt;tabItem_DataTab.Content = spSource;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;Hope that helps.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;Joe Kunk      &lt;br /&gt;Microsoft MVP Visual Basic       &lt;br /&gt;Okemos MI USA&amp;#160; &lt;br /&gt;February 24, 2011&lt;/font&gt;&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://jbknet.blogspot.com/feeds/4576991660015804226/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/14404010/4576991660015804226' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14404010/posts/default/4576991660015804226'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14404010/posts/default/4576991660015804226'/><link rel='alternate' type='text/html' href='http://jbknet.blogspot.com/2011/02/programmatically-changing-xaml-of-wpf.html' title='Programmatically Changing the XAML of a WPF Control'/><author><name>Joe Kunk</name><uri>http://www.blogger.com/profile/08512894287202788232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14404010.post-6518613333430440947</id><published>2010-05-19T21:24:00.001-04:00</published><updated>2010-05-19T21:24:58.682-04:00</updated><title type='text'>First “On VB” column published in Visual Studio Magazine</title><content type='html'>&lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;     &lt;br /&gt;My first “On VB” column was published on the website of &lt;/font&gt;&lt;a href=&quot;http://visualstudiomagazine.com/Home.aspx&quot; target=&quot;_blank&quot;&gt;&lt;font face=&quot;Arial&quot;&gt;Visual Studio Magazine&lt;/font&gt;&lt;/a&gt;&lt;font face=&quot;Arial&quot;&gt;.&amp;#160; It is titled “Calling Win32 API Functions in Visual Basic 2010” and is available at &lt;/font&gt;&lt;a title=&quot;http://visualstudiomagazine.com/articles/2010/04/20/call-win32-api-functions-in-vb.aspx&quot; href=&quot;http://visualstudiomagazine.com/articles/2010/04/20/call-win32-api-functions-in-vb.aspx&quot;&gt;&lt;font face=&quot;Arial&quot;&gt;http://visualstudiomagazine.com/articles/2010/04/20/call-win32-api-functions-in-vb.aspx&lt;/font&gt;&lt;/a&gt;&lt;font face=&quot;Arial&quot;&gt;.     &lt;br /&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;This article discusses the value of reaching beyond standard managed code and taking advantage of the functionality available in the native Win32 API, including some functionality not currently available via managed code.     &lt;br /&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;Hope you find it informative and useful.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;&amp;#160;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;Joe Kunk      &lt;br /&gt;Microsoft MVP VB       &lt;br /&gt;Okemos, MI USA       &lt;br /&gt;May 19, 2010&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;&lt;/font&gt;&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://jbknet.blogspot.com/feeds/6518613333430440947/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/14404010/6518613333430440947' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14404010/posts/default/6518613333430440947'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14404010/posts/default/6518613333430440947'/><link rel='alternate' type='text/html' href='http://jbknet.blogspot.com/2010/05/first-on-vb-column-published-in-visual.html' title='First “On VB” column published in Visual Studio Magazine'/><author><name>Joe Kunk</name><uri>http://www.blogger.com/profile/08512894287202788232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14404010.post-8183026816428292496</id><published>2010-03-20T17:32:00.001-04:00</published><updated>2010-03-20T17:32:36.811-04:00</updated><title type='text'>SQL Server Trigger to Log Who Created or Last Modified a Row and When</title><content type='html'>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;I implement this trigger to automatically update the CreatedOn, CreatedBy, ModifiedOn, ModifiedBy fields on almost all tables that I create in SQL Server so I decided it was time to share.&amp;#160; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;Even if you don’t think you need this trigger, I can assure you that you will be glad you added them at some point in the future.&amp;#160; It is just so useful to know who created or modified the rows when data quality issues arise.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;This trigger is not a full audit trail, it only retains information on the latest change.&amp;#160; A full audit trail would require at least one dedicated audit table and is a much more involved, whereas this is simple to implement.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;It assumes a unique primary key on each table and works for both SQL user accounts and integrated security.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;This example was taken from a SQL Server 2005 database.&amp;#160; I have successfully used the same trigger in SQL Server 2008.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;Hope this helps.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;Joe Kunk     &lt;br /&gt;Microsoft MVP VB      &lt;br /&gt;Okemos, MI USA&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Courier New&quot;&gt;Create TRIGGER [trgMyTableCreatedModified]     &lt;br /&gt;ON dbo.MyTable      &lt;br /&gt;AFTER INSERT,UPDATE      &lt;br /&gt;AS      &lt;br /&gt;BEGIN&lt;/font&gt;&lt;/p&gt; &lt;font face=&quot;Courier New&quot;&gt;   &lt;p&gt;     &lt;br /&gt;SET NOCOUNT ON;      &lt;br /&gt;Declare @now datetime      &lt;br /&gt;Declare @user varchar(50)      &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;SELECT     &lt;br /&gt;@now = GetDate()      &lt;br /&gt;,@user = user_name()      &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;UPDATE T SET     &lt;br /&gt;CreatedOn = COALESCE(I.CreatedOn, @now)       &lt;br /&gt;,CreatedBy = COALESCE(I.CreatedBy,@user)       &lt;br /&gt;,ModifiedOn = @now      &lt;br /&gt;,ModifiedBy = @user      &lt;br /&gt;FROM inserted I      &lt;br /&gt;JOIN dbo.MyTable as T      &lt;br /&gt;ON T.MyTableKey = I.MyTableKey      &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;END&lt;/p&gt; &lt;/font&gt;  </content><link rel='replies' type='application/atom+xml' href='http://jbknet.blogspot.com/feeds/8183026816428292496/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/14404010/8183026816428292496' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14404010/posts/default/8183026816428292496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14404010/posts/default/8183026816428292496'/><link rel='alternate' type='text/html' href='http://jbknet.blogspot.com/2010/03/sql-server-trigger-to-log-who-created.html' title='SQL Server Trigger to Log Who Created or Last Modified a Row and When'/><author><name>Joe Kunk</name><uri>http://www.blogger.com/profile/08512894287202788232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14404010.post-5861601518996510505</id><published>2010-01-16T17:45:00.001-05:00</published><updated>2010-01-16T17:45:58.496-05:00</updated><title type='text'>Displaying External HTML file content in Microsoft MVC</title><content type='html'>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;We are developing an application where one of our MVC views is simply to render HTML snippets from an external file.&amp;#160; Since our favorite internet search engine did not turn up any information on how to do this, I am posting the following information.&amp;#160; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;In our case the external HTML is a fairly simple snippet without javascript or form tags, so no manipulation of the file contents is required before display.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;You can quickly read in the entire file to a string as follows:&lt;/font&gt;&lt;/p&gt;  &lt;pre class=&quot;code&quot;&gt;&lt;span style=&quot;color: blue&quot;&gt;using &lt;/span&gt;System.IO;&lt;br /&gt;&lt;span style=&quot;color: blue&quot;&gt;…&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: blue&quot;&gt;public static string &lt;/span&gt;GetHTMLContents(&lt;span style=&quot;color: blue&quot;&gt;string &lt;/span&gt;filename)&lt;br /&gt;{&lt;br /&gt;&lt;span style=&quot;color: blue&quot;&gt;    string &lt;/span&gt;results = &lt;span style=&quot;color: blue&quot;&gt;string&lt;/span&gt;.Empty;&lt;br /&gt;    &lt;span style=&quot;color: blue&quot;&gt;if &lt;/span&gt;(&lt;span style=&quot;color: #2b91af&quot;&gt;File&lt;/span&gt;.Exists(filename))&lt;br /&gt;    {&lt;br /&gt;        results = &lt;span style=&quot;color: #2b91af&quot;&gt;File&lt;/span&gt;.ReadAllText(filename);&lt;br /&gt;    }&lt;br /&gt;    &lt;span style=&quot;color: blue&quot;&gt;return &lt;/span&gt;results;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt;&lt;font face=&quot;Arial&quot;&gt;Then just place that string in the ViewData with a command like&lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;code&quot;&gt;ViewData[&lt;span style=&quot;color: #a31515&quot;&gt;&amp;quot;HTMLContent&amp;quot;&lt;/span&gt;] =  results;&lt;/pre&gt;&lt;br /&gt;&lt;a href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;and in the View render it with code that looks like:&lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;code&quot;&gt;&lt;span style=&quot;color: blue&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #a31515&quot;&gt;span &lt;/span&gt;&lt;span style=&quot;color: red&quot;&gt;style&lt;/span&gt;&lt;span style=&quot;color: blue&quot;&gt;=&amp;quot; &lt;/span&gt;&lt;span style=&quot;color: red&quot;&gt;text-decoration&lt;/span&gt;:&lt;span style=&quot;color: blue&quot;&gt;underline&amp;quot;&amp;gt;&lt;/span&gt;HTML Content:&lt;span style=&quot;color: blue&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #a31515&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color: blue&quot;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #a31515&quot;&gt;br&lt;/span&gt;&lt;span style=&quot;color: blue&quot;&gt;/&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;background: #ffee62&quot;&gt;&amp;lt;%&lt;/span&gt;&lt;span style=&quot;color: blue&quot;&gt;= &lt;/span&gt;ViewData[&lt;span style=&quot;color: #a31515&quot;&gt;&amp;quot;HTMLContent&amp;quot;&lt;/span&gt;] &lt;span style=&quot;background: #ffee62&quot;&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a href=&quot;http://11011.net/software/vspaste&quot;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;Hope that helps.&lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;Joe Kunk&lt;br /&gt;    &lt;br /&gt;Microsoft MVP&lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;Okemos, MI USA&lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;January 16, 2010&lt;/font&gt;&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://jbknet.blogspot.com/feeds/5861601518996510505/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/14404010/5861601518996510505' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14404010/posts/default/5861601518996510505'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14404010/posts/default/5861601518996510505'/><link rel='alternate' type='text/html' href='http://jbknet.blogspot.com/2010/01/displaying-external-html-file-content.html' title='Displaying External HTML file content in Microsoft MVC'/><author><name>Joe Kunk</name><uri>http://www.blogger.com/profile/08512894287202788232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14404010.post-9041077652586826231</id><published>2009-01-17T20:23:00.001-05:00</published><updated>2009-01-17T20:23:36.157-05:00</updated><title type='text'>One of the things I love about developing in Microsoft .Net technologies...</title><content type='html'>&lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;I was fortunate enough to have the opportunity to ride down to &lt;a title=&quot;CodeMash 2009&quot; href=&quot;http://www.codemash.org/&quot;&gt;CodeMash 2009&lt;/a&gt; from Detroit MI to Sandusky OH with &lt;a title=&quot;Keith Elder blog&quot; href=&quot;http://keithelder.net/blog/&quot;&gt;Keith Elder&lt;/a&gt;, &lt;a title=&quot;Microsoft MVP&quot; href=&quot;http://mvp.support.microsoft.com/default.aspx&quot;&gt;MVP&lt;/a&gt;, &lt;a title=&quot;INETA&quot; href=&quot;http://www.ineta.org/&quot;&gt;INETA&lt;/a&gt; Speaker, and co-host of the &lt;a title=&quot;Deep Fried Bytes&quot; href=&quot;http://deepfriedbytes.com/&quot;&gt;Deep Fried Bytes&lt;/a&gt; podcast.&amp;#160;&amp;#160; Having some one-on-one conversation time with Keith was awesome, and best of all, the microphones were turned off.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;The conversation was surprisingly non-technical; we discussed owning dogs, personal financial strategies in these tough economic times, production techniques he uses on his podcast (okay that was a little technical), past CodeMash experiences, etc&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;At one point I stated &amp;quot;I like .Net because I can go from an expert to a novice in the same day&amp;quot;.&amp;#160; Keith immediately sent that quote out on Twitter with his mobile phone.&amp;#160; At first I was a little embarrassed, my thought was &amp;quot;Great!&amp;#160; Keith Elder just announced to the twitter-verse that there is a lot of .Net that I don&#39;t know.&amp;#160; Ouch!&amp;quot;. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;As I thought about it further, I felt reaffirmed in my original statement.&amp;#160; Like most technical people, I love to learn new things; that is what attracted me too many years ago to the computer industry as a teenager.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;I realized that my initial embarrassment was a mistake.&amp;#160; I have to work on what is currently paying the bills and my time to explore new or unfamiliar areas of the .Net Framework and CLR languages will never be as much as I would like it to be.&amp;#160; I&#39;m certain this is a common experience for all good .Net developers.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;Every day I look forward to learning how to do something familiar in a more efficient or elegant way, or learning an entirely new technique.&amp;#160; Working as a developer still &lt;u&gt;excites&lt;/u&gt; me, even after more than twenty years working in Microsoft languages and technologies (yes they have gotten better over time).&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;Thank you Microsoft for giving me and many others the chance to have a good paying career that makes me look forward to going to work every day.&amp;#160; May it never end!&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;So which portions of the .Net framework am I a complete novice at?&amp;#160; I&#39;m not saying ....&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;Joe Kunk     &lt;br /&gt;Microsoft MVP      &lt;br /&gt;Okemos, MI&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;&amp;#160;&lt;/font&gt;&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://jbknet.blogspot.com/feeds/9041077652586826231/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/14404010/9041077652586826231' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14404010/posts/default/9041077652586826231'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14404010/posts/default/9041077652586826231'/><link rel='alternate' type='text/html' href='http://jbknet.blogspot.com/2009/01/one-of-things-i-love-about-developing.html' title='One of the things I love about developing in Microsoft .Net technologies...'/><author><name>Joe Kunk</name><uri>http://www.blogger.com/profile/08512894287202788232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14404010.post-8292218052981852078</id><published>2009-01-02T07:14:00.001-05:00</published><updated>2009-01-02T07:14:53.209-05:00</updated><title type='text'>Microsoft MVP Award</title><content type='html'>&lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;I am deeply honored and excited to announce that Microsoft has awarded me a Most Valuable Professional (MVP) award in VB.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;I am confident that much of the basis for the reward came from my involvement in the .Net community.&amp;#160; I have been involved in &lt;/font&gt;&lt;a href=&quot;http://www.glugnet.org&quot;&gt;&lt;font face=&quot;Arial&quot;&gt;GLUGnet&lt;/font&gt;&lt;/a&gt;&lt;font face=&quot;Arial&quot;&gt; for over 4 years, the last two years as its President.&amp;#160; GLUGnet is the Microsoft .Net User Group that operates in both East Lansing MI and Flint MI.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;The rewards of becoming deeply involved in your .Net user group are many and if you are not regularly attending .Net user group meetings, I recommend that you start immediately.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;You can get a list of .Net user groups by region at &lt;/font&gt;&lt;font face=&quot;Arial&quot;&gt;&lt;a href=&quot;http://www.ineta.org/UserGroups/FindUserGroups.aspx&quot;&gt;ineta.org&lt;/a&gt;&lt;/font&gt;&lt;font face=&quot;Arial&quot;&gt;.&amp;#160; See you at the meetings!&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;Joe Kunk     &lt;br /&gt;Microsoft MVP      &lt;br /&gt;Okemos, MI&lt;/font&gt;&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://jbknet.blogspot.com/feeds/8292218052981852078/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/14404010/8292218052981852078' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14404010/posts/default/8292218052981852078'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14404010/posts/default/8292218052981852078'/><link rel='alternate' type='text/html' href='http://jbknet.blogspot.com/2009/01/microsoft-mvp-award.html' title='Microsoft MVP Award'/><author><name>Joe Kunk</name><uri>http://www.blogger.com/profile/08512894287202788232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14404010.post-2006259888426689562</id><published>2008-12-28T21:31:00.001-05:00</published><updated>2008-12-28T21:31:10.761-05:00</updated><title type='text'>Practical Entity Framework - Creating your first data display</title><content type='html'>&lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;     &lt;br /&gt;This blog post is the first in a series of posts to explore how to use the Entity Framework from a practical standpoint.&amp;#160; The focus will be less on the &amp;quot;about&amp;quot; of Entity Framework and more on the &amp;quot;how&amp;quot;. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;This series is oriented to those developers who are interested in adopting the Microsoft Entity Framework as their primary data access development methodology.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;My examples will use the Microsoft AdventureWorks database in SQL Server 2005 and Visual Studio 2008 SP1.&amp;#160; To provide some variety in the blogosphere, I will use Windows Forms and Visual Basic .Net rather than ASP.Net and C#.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font face=&quot;Arial&quot;&gt;Create a standard Windows Project&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;Using Visual Studio 2008 SP1 or later, create a new Visual Basic Windows project.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://lh5.ggpht.com/_QPj-OMk3owM/SVg2QZUriuI/AAAAAAAAAkQ/olRuStscNLw/s1600-h/EF001_CreateProject%5B14%5D.jpg&quot;&gt;&lt;font face=&quot;Arial&quot; color=&quot;#29303b&quot;&gt;&lt;img style=&quot;border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px&quot; height=&quot;296&quot; alt=&quot;EF001_CreateProject&quot; src=&quot;http://lh3.ggpht.com/_QPj-OMk3owM/SVg2RHKGQMI/AAAAAAAAAkU/MQhI9L74V5M/EF001_CreateProject_thumb%5B12%5D.jpg?imgmax=800&quot; width=&quot;404&quot; border=&quot;0&quot; /&gt;&lt;/font&gt;&lt;/a&gt;&lt;font face=&quot;Arial&quot;&gt; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;     &lt;br /&gt;Next add an ADO.NET Entity Data Model template.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://lh3.ggpht.com/_QPj-OMk3owM/SVg2R82_xJI/AAAAAAAAAkY/-_kYvETvNVM/s1600-h/EF002_Add_EDM_Designer%5B3%5D.jpg&quot;&gt;&lt;font face=&quot;Arial&quot; color=&quot;#29303b&quot;&gt;&lt;img style=&quot;border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px&quot; height=&quot;251&quot; alt=&quot;EF002_Add_EDM_Designer&quot; src=&quot;http://lh6.ggpht.com/_QPj-OMk3owM/SVg2SpOnvKI/AAAAAAAAAkc/Hddr1r1Rlto/EF002_Add_EDM_Designer_thumb%5B1%5D.jpg?imgmax=800&quot; width=&quot;404&quot; border=&quot;0&quot; /&gt;&lt;/font&gt;&lt;/a&gt;&lt;font face=&quot;Arial&quot;&gt; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;     &lt;br /&gt;Choose the option to generate the model from an existing database.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://lh6.ggpht.com/_QPj-OMk3owM/SVg2TS8U1-I/AAAAAAAAAkk/6pTwt1YnMuU/s1600-h/EF002_Add_EDM_Designer_Wizard1_From_Database%5B3%5D.jpg&quot;&gt;&lt;font face=&quot;Arial&quot; color=&quot;#29303b&quot;&gt;&lt;a href=&quot;http://lh6.ggpht.com/_QPj-OMk3owM/SVg2TS8U1-I/AAAAAAAAAkk/6pTwt1YnMuU/s1600-h/EF002_Add_EDM_Designer_Wizard1_From_Database%5B3%5D.jpg&quot;&gt;&lt;img style=&quot;border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px&quot; height=&quot;366&quot; alt=&quot;EF002_Add_EDM_Designer_Wizard1_From_Database&quot; src=&quot;http://lh6.ggpht.com/_QPj-OMk3owM/SVg2Ut4D6qI/AAAAAAAAAko/nt6aQBnJ1VQ/EF002_Add_EDM_Designer_Wizard1_From_Database_thumb%5B1%5D.jpg?imgmax=800&quot; width=&quot;404&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/font&gt;&lt;/a&gt;&lt;font face=&quot;Arial&quot;&gt; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;Choose an existing connection to the AdventureWorks SQL Server database, or create one if needed.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://lh6.ggpht.com/_QPj-OMk3owM/SVg2VI91fPI/AAAAAAAAAkw/lkKF_otSlYQ/s1600-h/EF002_Add_EDM_Designer_Wizard2_Specify_Connection%5B3%5D.jpg&quot;&gt;&lt;font face=&quot;Arial&quot; color=&quot;#29303b&quot;&gt;&lt;a href=&quot;http://lh6.ggpht.com/_QPj-OMk3owM/SVg2VI91fPI/AAAAAAAAAkw/lkKF_otSlYQ/s1600-h/EF002_Add_EDM_Designer_Wizard2_Specify_Connection%5B3%5D.jpg&quot;&gt;&lt;img style=&quot;border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px&quot; height=&quot;366&quot; alt=&quot;EF002_Add_EDM_Designer_Wizard2_Specify_Connection&quot; src=&quot;http://lh6.ggpht.com/_QPj-OMk3owM/SVg2WxY2voI/AAAAAAAAAk0/jK61IeIXLyY/EF002_Add_EDM_Designer_Wizard2_Specify_Connection_thumb%5B1%5D.jpg?imgmax=800&quot; width=&quot;404&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/font&gt;&lt;/a&gt;&lt;font face=&quot;Arial&quot;&gt; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;Select the items to be included in the model..&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://lh5.ggpht.com/_QPj-OMk3owM/SVg2XYPvnvI/AAAAAAAAAk8/cMv5kkKY3U0/s1600-h/EF002_Add_EDM_Designer_Wizard3_Specify_Objects%5B3%5D.jpg&quot;&gt;&lt;font face=&quot;Arial&quot; color=&quot;#29303b&quot;&gt;&lt;a href=&quot;http://lh5.ggpht.com/_QPj-OMk3owM/SVg2XYPvnvI/AAAAAAAAAk8/cMv5kkKY3U0/s1600-h/EF002_Add_EDM_Designer_Wizard3_Specify_Objects%5B3%5D.jpg&quot;&gt;&lt;img style=&quot;border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px&quot; height=&quot;366&quot; alt=&quot;EF002_Add_EDM_Designer_Wizard3_Specify_Objects&quot; src=&quot;http://lh5.ggpht.com/_QPj-OMk3owM/SVg2YYDLybI/AAAAAAAAAlA/CFwdpH6_W8U/EF002_Add_EDM_Designer_Wizard3_Specify_Objects_thumb%5B1%5D.jpg?imgmax=800&quot; width=&quot;404&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/font&gt;&lt;/a&gt;&lt;font face=&quot;Arial&quot;&gt; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;Click Finish.&amp;#160; The template will do its magic and create the entity data model.&amp;#160; You will notice that there is now a Model Browser panel in Visual Studio.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://lh4.ggpht.com/_QPj-OMk3owM/SVg2Y63covI/AAAAAAAAAlI/Cer9uaYPVHs/s1600-h/EF002_Add_EDM_Designer_Wizard4_Result.%5B3%5D.jpg&quot;&gt;&lt;font face=&quot;Arial&quot; color=&quot;#29303b&quot;&gt;&lt;a href=&quot;http://lh4.ggpht.com/_QPj-OMk3owM/SVg2Y63covI/AAAAAAAAAlI/Cer9uaYPVHs/s1600-h/EF002_Add_EDM_Designer_Wizard4_Result.%5B3%5D.jpg&quot;&gt;&lt;img style=&quot;border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px&quot; height=&quot;242&quot; alt=&quot;EF002_Add_EDM_Designer_Wizard4_Result.&quot; src=&quot;http://lh4.ggpht.com/_QPj-OMk3owM/SVg2Z35UmtI/AAAAAAAAAlM/-dEHVxFDQlY/EF002_Add_EDM_Designer_Wizard4_Result._thumb%5B1%5D.jpg?imgmax=800&quot; width=&quot;404&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/font&gt;&lt;/a&gt;&lt;font face=&quot;Arial&quot;&gt; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;Modify the default windows form to have a DataGridView and a button as shown below.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://lh3.ggpht.com/_QPj-OMk3owM/SVg2aDe2DuI/AAAAAAAAAlQ/56uZAEPtNWE/s1600-h/EF003_Run%20with%20Blank%20Grid%20and%20button.%5B2%5D.jpg&quot;&gt;&lt;font face=&quot;Arial&quot; color=&quot;#29303b&quot;&gt;&lt;img style=&quot;border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px&quot; height=&quot;244&quot; alt=&quot;EF003_Run with Blank Grid and button.&quot; src=&quot;http://lh3.ggpht.com/_QPj-OMk3owM/SVg2atxENgI/AAAAAAAAAlU/dDKdyM2jnz4/EF003_Run%20with%20Blank%20Grid%20and%20button._thumb.jpg?imgmax=800&quot; width=&quot;244&quot; border=&quot;0&quot; /&gt;&lt;/font&gt;&lt;/a&gt;&lt;font face=&quot;Arial&quot;&gt; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;The code behind for the form to display the Product table is simply as follows:&lt;/font&gt;&lt;/p&gt;  &lt;pre class=&quot;csharpcode&quot;&gt;&lt;font size=&quot;1&quot;&gt;Imports System.Data.Objects&lt;br /&gt;Public Class Form1&lt;br /&gt;    Private Sub Button1_Click(ByVal sender As System.Object, _&lt;br /&gt;                              ByVal e As System.EventArgs) _&lt;br /&gt;    Handles Button1.Click&lt;br /&gt;        Call DisplayDataInGrid()&lt;br /&gt;    End Sub&lt;br /&gt;&lt;br /&gt;    Private Sub DisplayDataInGrid()&lt;br /&gt;        &lt;/font&gt;&lt;font size=&quot;1&quot;&gt;&lt;span class=&quot;str&quot;&gt;&#39; Create the ObjectContext.&lt;br /&gt;        Dim context As ObjectContext = _&lt;br /&gt;            New ObjectContext(&amp;quot;name=AdventureWorksEntities&amp;quot;)&lt;br /&gt;&lt;br /&gt;        &#39;&lt;/span&gt; Set the DefaultContainerName &lt;span class=&quot;kwrd&quot;&gt;for&lt;/span&gt; the ObjectContext.&lt;br /&gt;        context.DefaultContainerName = &lt;span class=&quot;str&quot;&gt;&amp;quot;AdventureWorksEntities&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        Dim query As ObjectQuery(Of Product) = _&lt;br /&gt;            New ObjectQuery(Of Product)(&lt;span class=&quot;str&quot;&gt;&amp;quot;Product&amp;quot;&lt;/span&gt;, context)&lt;br /&gt;&lt;br /&gt;        Me.DataGridView1.DataSource = query&lt;br /&gt;    End Sub&lt;br /&gt;End Class&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;And the result is: &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href=&quot;http://lh6.ggpht.com/_QPj-OMk3owM/SVg2bD3F15I/AAAAAAAAAlY/0wzUAf1Zp_0/s1600-h/EF005_Run%20Image.%5B2%5D.jpg&quot;&gt;&lt;font face=&quot;Arial&quot; color=&quot;#29303b&quot;&gt;&lt;img style=&quot;border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px&quot; height=&quot;244&quot; alt=&quot;EF005_Run Image.&quot; src=&quot;http://lh5.ggpht.com/_QPj-OMk3owM/SVg2beZzq4I/AAAAAAAAAlc/kOyLE-OLg2Q/EF005_Run%20Image._thumb.jpg?imgmax=800&quot; width=&quot;244&quot; border=&quot;0&quot; /&gt;&lt;/font&gt;&lt;/a&gt;&lt;font face=&quot;Arial&quot;&gt; &lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;Hope that helps.&lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;Joe Kunk&lt;br /&gt;    &lt;br /&gt;Okemos, MI&lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&lt;/font&gt;&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://jbknet.blogspot.com/feeds/2006259888426689562/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/14404010/2006259888426689562' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14404010/posts/default/2006259888426689562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14404010/posts/default/2006259888426689562'/><link rel='alternate' type='text/html' href='http://jbknet.blogspot.com/2008/12/practical-entity-framework-creating.html' title='Practical Entity Framework - Creating your first data display'/><author><name>Joe Kunk</name><uri>http://www.blogger.com/profile/08512894287202788232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/_QPj-OMk3owM/SVg2RHKGQMI/AAAAAAAAAkU/MQhI9L74V5M/s72-c/EF001_CreateProject_thumb%5B12%5D.jpg?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14404010.post-5770361997625915780</id><published>2008-12-28T19:47:00.001-05:00</published><updated>2008-12-28T19:47:02.547-05:00</updated><title type='text'>SQL Server DBA Best Practices</title><content type='html'>&lt;p&gt;A recent issue of SQL Server Magazine had a poster entitled &amp;quot;Brad M. McGehee&#39;s SQL Server DBA Best Practices&amp;quot;, included courtesy of &lt;a href=&quot;http://www.red-gate.com/&quot;&gt;redgate&lt;/a&gt; software.&amp;#160; &lt;/p&gt;  &lt;p&gt;The poster is a wealth of great information on how to be successful with Microsoft SQL Server.&amp;#160; Thank you &lt;a href=&quot;http://www.simple-talk.com/content/file.ashx?file=1208&quot;&gt;redgate&lt;/a&gt;!&lt;/p&gt;  &lt;p&gt;In case you missed it, you can get your own free copy of the &lt;a title=&quot;poster&quot; href=&quot;http://www.simple-talk.com/content/file.ashx?file=1208&quot;&gt;poster&lt;/a&gt; or find a copy of the text on &lt;a title=&quot;SQL Server DBA Best Practices text&quot; href=&quot;http://www.simple-talk.com/sql/database-administration/brads-sure-dba-checklist/#_Toc209585587&quot;&gt;Brad&#39;s blog&lt;/a&gt;.&amp;#160; &lt;/p&gt;  &lt;p&gt;It is definitely worth your time to give it a careful read. &lt;/p&gt;  &lt;p&gt;Hope that helps.&lt;/p&gt;  &lt;p&gt;Joe Kunk   &lt;br /&gt;Okemos, MI&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://jbknet.blogspot.com/feeds/5770361997625915780/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/14404010/5770361997625915780' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14404010/posts/default/5770361997625915780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14404010/posts/default/5770361997625915780'/><link rel='alternate' type='text/html' href='http://jbknet.blogspot.com/2008/12/sql-server-dba-best-practices.html' title='SQL Server DBA Best Practices'/><author><name>Joe Kunk</name><uri>http://www.blogger.com/profile/08512894287202788232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14404010.post-2430772270026706554</id><published>2008-11-23T23:34:00.001-05:00</published><updated>2008-11-23T23:34:16.249-05:00</updated><title type='text'>Use a Wiki for Documentation</title><content type='html'>&lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;I am currently working with a client that, like most clients, is insisting on complete documentation of whatever I do while on-site.&amp;#160; I find the most-productive way for me to do this is to use desktop Wiki software on my laptop as my documentation tool.&amp;#160; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;The desktop Wiki software allows me to quickly enter notes as I work on items, dynamically creating an intuitive structure for the information.&amp;#160; For less formal engagements, the printouts from the Wiki itself are sufficient.&amp;#160; For more formal engagements, the desktop Wiki helps me organize my thoughts and I can then easily transfer my Wiki text into the formal documentation format required by the client.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;If the client does not have formal documentation requirements, I have been successful in getting the client to adopt a Wiki as their technical documentation repository.&amp;#160; Once they see how easy it is to enter and maintain the information, find it via the full-text search, and access it as a web-site from anywhere (server version), they are sold on it.&amp;#160; I point out that for maximum benefit, the Wiki should be secured for access only by technical staff and one or more separate Wiki sites should be set up if it is to be used outside of technical staff.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;If you are interested in trying out a Wiki, I have been very happy with the &lt;/font&gt;&lt;a href=&quot;http://www.screwturn.eu/&quot; target=&quot;_blank&quot;&gt;&lt;font face=&quot;Arial&quot;&gt;ScrewTurn Wiki&lt;/font&gt;&lt;/a&gt;&lt;font face=&quot;Arial&quot;&gt;.&amp;#160; It is written in .Net, has both a Windows desktop version and an IIS version, and is available at no charge under the GPL v2 licence.&amp;#160; It has a nice graphical toolbar in edit mode plus learning the formatting tags is quick and easy.&amp;#160; I find it very intuitive.&amp;#160; Online hosting is available for a fee if desired.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;If you have not yet tried using a Wiki to collect and organize your documentation, I recommend that you do so.&amp;#160; You will be amazed at how much documentation you will actually do real-time once it becomes so easy with the Wiki.&amp;#160; Since finding things with the full-text search feature is so easy and fast, you will become self-motivated to keep it updated as you work, just as a future reference.&amp;#160; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;I also find it very helpful to use the Wiki to organize my findings as I work through a difficult issue.&amp;#160; This helps me arrive at a solution faster, and the process of how I arrived at the solution is documented as a bonus.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;Hope that helps.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face=&quot;Arial&quot;&gt;Joe Kunk      &lt;br /&gt;Okemos, MI&lt;/font&gt;&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://jbknet.blogspot.com/feeds/2430772270026706554/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/14404010/2430772270026706554' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14404010/posts/default/2430772270026706554'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14404010/posts/default/2430772270026706554'/><link rel='alternate' type='text/html' href='http://jbknet.blogspot.com/2008/11/use-wiki-for-documentation.html' title='Use a Wiki for Documentation'/><author><name>Joe Kunk</name><uri>http://www.blogger.com/profile/08512894287202788232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14404010.post-6985475010124319757</id><published>2008-11-18T00:14:00.006-05:00</published><updated>2008-11-18T00:32:42.053-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="LINQ"/><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server"/><title type='text'>How to easily access the results of a LINQ-to-SQL query</title><content type='html'>&lt;span style=&quot;font-family:arial;&quot;&gt;I have introduced several developers to LINQ-to-SQL and each has been very impressed, immediately followed by the same question. I&#39;ll share the question and the answer here.&lt;br /&gt;&lt;br /&gt;I show a standard LINQ-to-SQL query and assign the results to a DataGridView as the Datasource. This is consistent with most introductory examples. Think of it as the LINQ-to-SQL version of Hello World.&lt;br /&gt;&lt;br /&gt;The next question is inevitably some variation of &quot;OK, now how do I use the data that LINQ returned?&quot;.&lt;br /&gt;&lt;br /&gt;The answer is simply to convert it to a Generic List with the LINQ &quot;ToList&quot; extension method.&lt;br /&gt;&lt;br /&gt;A fully functional code sample will help make it clear.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Dim dbConn as string = &quot;Server=(local);Database=AdventureWorks;&quot; &amp; _&lt;br /&gt;&quot;Trusted_Connection=yes;&quot;&lt;br /&gt;&lt;br /&gt;Dim dbx As New System.Data.Linq.DataContext(dbConn)&lt;br /&gt;&lt;br /&gt;Dim Promo1 = _&lt;br /&gt;From emp In dbx.GetTable(Of HumanResources_Employee)() _&lt;br /&gt;Where emp.Gender = &quot;M&quot; _&lt;br /&gt;Order By emp.Person_Contact.LastName, emp.Person_Contact.FirstName _&lt;br /&gt;Select emp&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Me.DataGridView1.DataSource = Promo1&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&#39;Promo1 is of type DatabaseQuery1&lt;br /&gt;Dim PromoList = Promo1.ToList&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;MessageBox.Show(String.Format(&quot;Third Person&#39;s Name is {0}, {1}&quot;, _&lt;br /&gt;PromoList(2).Person_Contact.LastName, _&lt;br /&gt;PromoList(2).Person_Contact.FirstName))&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Hope that helps.&lt;br /&gt;&lt;br /&gt;Joe Kunk&lt;br /&gt;Okemos, MI &lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://jbknet.blogspot.com/feeds/6985475010124319757/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/14404010/6985475010124319757' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14404010/posts/default/6985475010124319757'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14404010/posts/default/6985475010124319757'/><link rel='alternate' type='text/html' href='http://jbknet.blogspot.com/2008/11/how-to-easily-access-results-of-linq-to.html' title='How to easily access the results of a LINQ-to-SQL query'/><author><name>Joe Kunk</name><uri>http://www.blogger.com/profile/08512894287202788232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14404010.post-3986073979800564812</id><published>2008-11-16T22:57:00.005-05:00</published><updated>2008-11-16T23:18:13.311-05:00</updated><title type='text'>Organize your Linq-To-SQL Schemas in a separate Solution</title><content type='html'>&lt;span style=&quot;font-family:arial;&quot;&gt;Once you generate your database schema classes into a single source code file per my previous post &lt;/span&gt;&lt;a href=&quot;http://jbknet.blogspot.com/2008/11/simple-batch-file-to-generate-full.html&quot;&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;Simple Batch File to Generate a Full Database Schema using SQLMetal for LINQ to SQL&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;, you still need a way to utilize these schema files effectively in your projects and easily update the schemas for all applications that use them upon any database schema change.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;I have found the easiest way to do this is to create a separate Visual Studio solution that contains one project per database, and then reference the appropriate project(s) from any Linq-to-SQL applications that utilize the project&#39;s database.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;For example, on my laptop I have instances of the AdventureWorks, NorthWind, and Pubs databases. I created a Solution that has three projects, named for each of these three databases. The sole source code file in each project is the database schema file generated by SQLMetal for that database. These projects are referenced as needed by other applications.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;If the schema in a database changes, I simply use my batch file mentioned in the previous post to re-generate the database schema source file, copy it into the appropriate project - replacing the previous source file, and build the project or solution. I&#39;ve never had a problem with the build and it is fast. Since I&#39;m building and not executing any code, I can even build directly on an untrusted resource such as a network drive.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;In case that is confusing, here is a graphic that illustrates the solution in Visual Studio.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6-0wHiEOoyqpX4GL_kl-LNaF9g5r6K5QPAwUsfJAVilb50aIDG5buNlL9IOFvL7zDxJFLaHw0hWvEDnLxX19wFj6Na1jTXLciAlfMAj7YV2aAx4vQiHvu_d5SWU90UTVrlRuCkw/s1600-h/LINQ_DBSchemas_SolutionFolder.GIF&quot;&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;&lt;img id=&quot;BLOGGER_PHOTO_ID_5269475244808429490&quot; style=&quot;DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 250px; TEXT-ALIGN: center&quot; alt=&quot;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6-0wHiEOoyqpX4GL_kl-LNaF9g5r6K5QPAwUsfJAVilb50aIDG5buNlL9IOFvL7zDxJFLaHw0hWvEDnLxX19wFj6Na1jTXLciAlfMAj7YV2aAx4vQiHvu_d5SWU90UTVrlRuCkw/s400/LINQ_DBSchemas_SolutionFolder.GIF&quot; border=&quot;0&quot; /&gt;&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;font-family:arial;&quot;&gt;Hope that helps.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;Joe Kunk&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;Okemos, Mi&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://jbknet.blogspot.com/feeds/3986073979800564812/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/14404010/3986073979800564812' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14404010/posts/default/3986073979800564812'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14404010/posts/default/3986073979800564812'/><link rel='alternate' type='text/html' href='http://jbknet.blogspot.com/2008/11/organize-your-linq-to-sql-schemas-in.html' title='Organize your Linq-To-SQL Schemas in a separate Solution'/><author><name>Joe Kunk</name><uri>http://www.blogger.com/profile/08512894287202788232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6-0wHiEOoyqpX4GL_kl-LNaF9g5r6K5QPAwUsfJAVilb50aIDG5buNlL9IOFvL7zDxJFLaHw0hWvEDnLxX19wFj6Na1jTXLciAlfMAj7YV2aAx4vQiHvu_d5SWU90UTVrlRuCkw/s72-c/LINQ_DBSchemas_SolutionFolder.GIF" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14404010.post-8701130804552420623</id><published>2008-11-16T18:54:00.004-05:00</published><updated>2008-11-16T22:02:05.183-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="database"/><category scheme="http://www.blogger.com/atom/ns#" term="LINQ"/><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server"/><title type='text'>Simple Batch File to Generate a Full Database Schema using SQLMetal for LINQ to SQL</title><content type='html'>Applications that use LINQ-to-SQL need to instantiate a System.Data.Linq.DataContext for the database that they want to use.  The utility SQLMetal is provided to generate the schema classes needed to instantiate the DataContext.  I created the following batch file to easily generate a complete Visual Basic or C# schema after database updates.&lt;br /&gt;&lt;br /&gt;I find that generating the schema utilizing SQLMetal is a great error check on the logical consistency of the database Programmabilty objects.  The warning messages generated during the process often identify previously unknown errors in stored procedures, user defined functions, views, etc.&lt;br /&gt;&lt;br /&gt;The example assumes SQL authentication using the &#39;sa&#39; username and the (local) server, and a SQL2005 database.&lt;br /&gt;&lt;br /&gt;The batch file has three parameters.&lt;br /&gt;Parameter 1 is the Database name.&lt;br /&gt;Parameter 2 is the Password for the &#39;sa&#39; server login.&lt;br /&gt;Parameter 3 is the language file extension for the output.  Values are &#39;vb&#39; or &#39;cs&#39;.&lt;br /&gt;&lt;br /&gt;The batch file is named DBSchema.bat and is placed in the default folder opened with the Visual Studio 2008 Command Prompt, C:\Program Files\Microsoft Visual Studio 9.0\VC\ to make it easy to access.  You can create the batch file by copying the following code into Notepad and saving it in the folder listed above as DBSchema.bat.  Use the command &quot;Type DBSchema.bat&quot; to review the needed parameters before using the batch file.&lt;br /&gt;&lt;br /&gt;Example usage:&lt;br /&gt;DBSchema AdventureWorks password vb &lt;enter&gt;&lt;br /&gt;&lt;br /&gt;The resulting .vb file will reside in the C:\Program Files\Microsoft Visual Studio 9.0\VC\ folder and can be copied as needed for use in your .Net projects.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;REM Requires Parameter 1: Database name&lt;br /&gt;REM Requires Parameter 2: Password&lt;br /&gt;REM Requires Parameter 3: Language file extension&lt;br /&gt;&lt;br /&gt;SqlMetal /server:(local) /database:%1 /user:sa /password:%2 /namespace:%1Schema /functions /sprocs /views /code:%1Schema.%3 /Provider:SQL2005&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The batch file requires that the SqlMetal command be on a single line.  But for readability purposes, it is repeated here in multiple lines:&lt;br /&gt;&lt;br /&gt;&lt;/enter&gt;&lt;pre&gt;SqlMetal /server:(local) /database:%1&lt;br /&gt;/user:sa /password:%2 /namespace:%1Schema&lt;br /&gt;/functions /sprocs /views&lt;br /&gt;/code:%1Schema.%3 /Provider:SQL2005&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;enter&gt;&lt;br /&gt;Hope that helps,&lt;br /&gt;&lt;br /&gt;Joe Kunk&lt;br /&gt;Okemos, MI&lt;/enter&gt;</content><link rel='replies' type='application/atom+xml' href='http://jbknet.blogspot.com/feeds/8701130804552420623/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/14404010/8701130804552420623' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14404010/posts/default/8701130804552420623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14404010/posts/default/8701130804552420623'/><link rel='alternate' type='text/html' href='http://jbknet.blogspot.com/2008/11/simple-batch-file-to-generate-full.html' title='Simple Batch File to Generate a Full Database Schema using SQLMetal for LINQ to SQL'/><author><name>Joe Kunk</name><uri>http://www.blogger.com/profile/08512894287202788232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14404010.post-6559691774360114674</id><published>2008-11-15T15:52:00.002-05:00</published><updated>2008-11-15T16:27:27.566-05:00</updated><title type='text'>How to quickly get the HTML source of an unsecured web page in Visual Basic .Net</title><content type='html'>&lt;span style=&quot;font-family:arial;&quot;&gt;There are a LOT of useful applications that can be built on the premise of just retrieving the raw HTML of a publicly available web page and then parsing and analyzing the page contents. That should not be a surprise to anyone, but what may be surprising is just how simple it is to do in .Net. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;Here is an example that shows just how easy it is:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;font-size:85%;&quot;&gt;&lt;pre&gt;Dim myURI as new System.URI(&amp;quot;http://www.microsoft.com&amp;quot;)&lt;br /&gt;&lt;br /&gt;Dim myHTML as string = GetURIText(myURI)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Protected Function GetURIText(ByVal myURI As System.Uri) As String&lt;br /&gt;&lt;br /&gt;    Dim result As String = String.Empty&lt;br /&gt;&lt;br /&gt;    If Not IsNothing(myURI) Then&lt;br /&gt;&lt;br /&gt;        Dim wb As New System.Net.WebClient&lt;br /&gt;&lt;br /&gt;        result = wb.DownloadString(myURI)&lt;br /&gt;&lt;br /&gt;    End If&lt;br /&gt;&lt;br /&gt;    Return result&lt;br /&gt;&lt;br /&gt;End Function&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre&gt;&lt;br /&gt; &lt;/pre&gt;&lt;/span&gt;&lt;span style=&quot;font-family:courier new;font-size:85%;&quot;&gt;&lt;/span&gt;Hope that helps.&lt;br /&gt;&lt;br /&gt;Joe Kunk&lt;br /&gt;Okemos, MI&lt;br /&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://jbknet.blogspot.com/feeds/6559691774360114674/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/14404010/6559691774360114674' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14404010/posts/default/6559691774360114674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14404010/posts/default/6559691774360114674'/><link rel='alternate' type='text/html' href='http://jbknet.blogspot.com/2008/11/how-to-quickly-get-html-source-of.html' title='How to quickly get the HTML source of an unsecured web page in Visual Basic .Net'/><author><name>Joe Kunk</name><uri>http://www.blogger.com/profile/08512894287202788232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14404010.post-6454779197008863598</id><published>2008-11-07T00:56:00.001-05:00</published><updated>2008-11-07T00:59:05.549-05:00</updated><title type='text'>A good reminder - use computed columns in SQL Server 2005 / 2008</title><content type='html'>I have been doing a lot of work in SQL Server 2005 over the last 6 months and I have found it very helpful to use computed columns to hold any totals or other figures that can be derived from other standard columns within the same table.&lt;br /&gt;&lt;br /&gt;As a simple example, in the LaborDetail table I have Regular hours, OverTime hours, and DoubleTime hours. It is very helpful to have the TotalHours column present in the table as well. A computed column provides this number and ensures that it is correct, providing the column&#39;s formula is correct.&lt;br /&gt;&lt;br /&gt;Computed columns can be added without breaking existing stored procedures or external programs that do INSERTs on the table since computed columns do not need to be included in the field list.&lt;br /&gt;&lt;br /&gt;If performance could be considered an issue, you have the option to mark the column attribute &quot;Is Persisted&quot; to true. The column value will be physically carried in the table and will be re-computed only when one of its dependent columns changes. Stored Procedures and external programs are still not affected, but table storage size is increased.&lt;br /&gt;&lt;br /&gt;This post might come under the heading of stating the obvious, but I believe it is a good reminder and it certainly has been helpful for me to remember this.&lt;br /&gt;&lt;br /&gt;Hope it helps.&lt;br /&gt;&lt;br /&gt;Joe Kunk&lt;br /&gt;Okemos, MI</content><link rel='replies' type='application/atom+xml' href='http://jbknet.blogspot.com/feeds/6454779197008863598/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/14404010/6454779197008863598' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14404010/posts/default/6454779197008863598'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14404010/posts/default/6454779197008863598'/><link rel='alternate' type='text/html' href='http://jbknet.blogspot.com/2008/04/good-reminder-use-computed-columns-in.html' title='A good reminder - use computed columns in SQL Server 2005 / 2008'/><author><name>Joe Kunk</name><uri>http://www.blogger.com/profile/08512894287202788232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14404010.post-5123321462716989</id><published>2008-08-09T02:25:00.004-04:00</published><updated>2008-08-09T02:33:48.205-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="LINQ"/><category scheme="http://www.blogger.com/atom/ns#" term="Presentations"/><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server"/><title type='text'>Speaking at CodeStock 2008</title><content type='html'>&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;a href=&quot;http://codestock.org&quot;&gt;&lt;img alt=&quot;Join me at CodeStock&quot; height=&quot;150&quot; width=&quot;140&quot; src=&quot;http://codestock.org/Marketing/blog_badge.png&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br&gt;I will be giving the presentation &quot;LINQ to SQL - CRUD!&quot; at CodeStock 2008 in Knoxsville, TN on Saturday August 10th.  This talk is an overview of LINQ to SQL designed for those that are just beginning with the technology and want to see easy-to-implement examples for Creating, Reading, Updating and Deleting data from a SQL Server database.&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://jbknet.blogspot.com/feeds/5123321462716989/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/14404010/5123321462716989' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14404010/posts/default/5123321462716989'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14404010/posts/default/5123321462716989'/><link rel='alternate' type='text/html' href='http://jbknet.blogspot.com/2008/08/speaking-at-codestock-2008.html' title='Speaking at CodeStock 2008'/><author><name>Joe Kunk</name><uri>http://www.blogger.com/profile/08512894287202788232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14404010.post-3381869661134541608</id><published>2008-07-23T21:02:00.003-04:00</published><updated>2008-07-23T21:48:42.344-04:00</updated><title type='text'>Key Features of SQL Server  2008</title><content type='html'>&lt;span style=&quot;font-family:arial;&quot;&gt;While at TechEd 2008, I obtained a listing of the key features of Microsoft SQL Server 2008. I have been wondering what the new features are and which ones I might be most interested in. I really like this particular list since it is so concise.  I just ran across the list again and decided to share it here.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;Manageability&lt;/span&gt;&lt;br /&gt;&lt;ol style=&quot;font-family: arial;&quot;&gt;&lt;li&gt;Simplify enterprise-wide configuration with Policy-Based Management.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Troubleshoot, tune, and monitor SQL Server 2008 instances across the enterprise with Performance Data Collection.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Script database maintenance tasks with Windows PowerShell(tm)&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;OLTP&lt;/span&gt;&lt;br /&gt;&lt;ol style=&quot;font-family: arial;&quot;&gt;&lt;li&gt;Help protect sensitive data with Transparent Data Encryption&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Audit all actions for more comprehensive security and compliance&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Prioritize workload processing with Resource Governor&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Minimize downtime with hot-add CPU support&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Help ensure business continuity with enhanced clustering capabilities and support for the new Windows Server 2008 clustering improvements&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Increase database resiliency with enhanced database mirroring that enables automatic recovery page of damaged pages&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Build peer-to-peer replication solutions quickly with enhanced wizards and topology management tools&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;Data Warehousing&lt;/span&gt;&lt;br /&gt;&lt;ol style=&quot;font-family: arial;&quot;&gt;&lt;li&gt;Enhance data warehouse ETL solutions with change data capture and the MERGE statement&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Benefit from improved lookup performance in Integration Services&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Reduce physical storage requirements for large data warehouses with data compression&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Enhance data warehouse query performance with partition-based parallel query processing and start schema optimizations&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Optimize storage space for NULL values with sparse columns&lt;/li&gt;&lt;/ol&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;Business Intelligence&lt;/span&gt;&lt;br /&gt;&lt;ol style=&quot;font-family: arial;&quot;&gt;&lt;li&gt;Build high-performance analysis solutions with enhanced wizards, tools, and best practice warnings in Business Intelligence Development Studio&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Increase OLAP performance with writeback to MOLAP support and block computations&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Build high-performance reporting solutions with re-architected Reporting Services&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Create flexible report formats with new Tablix data regions&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Increase report value with rich text formatting and expanded chart support&lt;/li&gt;&lt;/ol&gt;&lt;span style=&quot;font-weight: bold;font-family:arial;&quot; &gt;Application Development&lt;/span&gt;&lt;br /&gt;&lt;ol style=&quot;font-family: arial;&quot;&gt;&lt;li&gt;Web-enable your data with ADO.NET Data services&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Simplify data access code with Language Integrated Query (LINQ) and query SQL Server databases with LINQ to SQL&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Take data offline with SQL Server Compact and synchronize your data with the new Microsoft Sync Framework&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Model your data with the ADO.NET Entity Framework&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Apply consistent query syntax and use LINQ to Entities to manage entities&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Use new data types and Transact-SQL capabilities to build powerful relational data applications&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Integrated data stored in file system stores with FILESTREAM support&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Build geospatial data applications with the geography and geometry data types&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;Hope that helps.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;Joe Kunk&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;Okemos, MI&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://jbknet.blogspot.com/feeds/3381869661134541608/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/14404010/3381869661134541608' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14404010/posts/default/3381869661134541608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14404010/posts/default/3381869661134541608'/><link rel='alternate' type='text/html' href='http://jbknet.blogspot.com/2008/07/key-features-of-sql-server-2008.html' title='Key Features of SQL Server  2008'/><author><name>Joe Kunk</name><uri>http://www.blogger.com/profile/08512894287202788232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14404010.post-2418924361548459288</id><published>2008-07-21T12:36:00.004-04:00</published><updated>2008-07-23T22:20:08.779-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="LINQ"/><title type='text'>LINQ query to pull a single record from a collection still requires enumercation over results</title><content type='html'>&lt;span style=&quot;font-family:arial;&quot;&gt;I wrote a LINQ query in Visual Basic .Net 2008 in order to pull a single record from a Generic List collection.  The intent was to use LINQ as an easier alternative to writing a Predicate function for the .Find method of the collection.  The code is below.  I made what I believe will be a common LINQ mistake. Below is the explanation of the errors I saw, the code that produced those errors, and then the proper way to do it.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;A symptom of the problem is that the LINQ query returned a SelectIterator object and in order to see the string I had to enumerate (For Each) over the result in order to obtain the data.  I knew that the WHERE condition was sufficient to return only a single result, but LINQ did not so it returned a SelectIterator to be enable me to enumerate through the result set.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;If I tried to assign the LINQ result directly to a string, I get the error message &quot;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;Conversion from type &#39;&lt;selectiterator&gt;d__d(Of MyDataType,String)&#39; to type &#39;String&#39; is not valid&lt;/selectiterator&gt;&lt;/span&gt;&lt;/span&gt;.&quot;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;The incorrect code is:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;Dim Result as string = string.empty&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;Dim Filename = From item In myCollection _&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;                               Where item.key.ToLower = MenuPath.ToLower _&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;                               Select item.MyFilename&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;                For Each s As String In Filename : Result = s : Next&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;Console.WriteLine(&quot;Returned String : &quot; + s)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;&lt;br /&gt;The correct code is achieved by putting parenthesis around the LINQ query and using the .Single method to inform LINQ that we are expecting a single-value result.  The corrected code is :&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;Dim Result as string = string.empty&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;Dim Filename = (From item In myCollection _&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;                               Where item.key.ToLower = MenuPath.ToLower _&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;                               Select item.MyFilename).Single&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;Console.WriteLine(&quot;Returned String : &quot; + Filename)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;&lt;br /&gt;A special thank you to &lt;a href=&quot;http://srtsolutions.com/blogs/billwagner/&quot;&gt;Bill Wagner&lt;/a&gt; of &lt;a href=&quot;http://srtsolutions.com/&quot;&gt;SRT Solutions&lt;/a&gt; for his solution to the error in the first listing when I initially blogged it.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;Hope that helps.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;Joe Kunk&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;Okemos, MI&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://jbknet.blogspot.com/feeds/2418924361548459288/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/14404010/2418924361548459288' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14404010/posts/default/2418924361548459288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14404010/posts/default/2418924361548459288'/><link rel='alternate' type='text/html' href='http://jbknet.blogspot.com/2008/07/linq-query-to-pull-single-record-from.html' title='LINQ query to pull a single record from a collection still requires enumercation over results'/><author><name>Joe Kunk</name><uri>http://www.blogger.com/profile/08512894287202788232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14404010.post-7085126663926128973</id><published>2008-07-01T13:01:00.003-04:00</published><updated>2008-07-01T13:11:40.843-04:00</updated><title type='text'>Article &quot;How to Host a Great Code Camp&quot; in July 2008 INETA newsletter</title><content type='html'>I wrote an article titled &quot;How to host a great CodeCamp&quot; in the July 2008 &lt;a href=&quot;http://www.ineta.org/&quot;&gt;INETA&lt;/a&gt; newsletter based on our user group&#39;s experience hosting the Lansing Day of .Net on June 21, 2008, which by all accounts was a great success.  The newsletter presented the article this way:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;table id=&quot;tblRegular_Content&quot; width=&quot;100%&quot; border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr valign=&quot;top&quot;&gt; &lt;td style=&quot;font-weight: bold; font-size: 10pt; color: white; font-family: Verdana,Tahoma,Arial; background-color: rgb(170, 202, 0);&quot;&gt;&lt;a shape=&quot;rect&quot; name=&quot;A11&quot;&gt;&lt;/a&gt; User Group Above and Beyond - This Month: Joe  Kunk&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign=&quot;top&quot;&gt;&lt;img alt=&quot;*&quot; src=&quot;http://www.ineta.org/newsletters/images/ts.gif&quot; width=&quot;1&quot; border=&quot;0&quot; height=&quot;7&quot; /&gt; &lt;table width=&quot;100%&quot; border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;&lt;img src=&quot;http://www.ineta.org/newsletters/images/ts.gif&quot; width=&quot;1&quot; height=&quot;7&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;div style=&quot;font-family: arial;&quot;&gt; &lt;div&gt; &lt;div&gt;This month we recognize Joe Kunk, President of the Greater Lansing (MI)  User Group for .Net  (or  &lt;a href=&quot;http://www.glugnet.org&quot; shape=&quot;rect&quot;&gt;&lt;span style=&quot;color: rgb(129, 0, 129);&quot;&gt;GLUGnet&lt;/span&gt;&lt;/a&gt; ), and his team for delivering  an over the top experience in their first CodeCamp.  Unlike any CodeCamp that I  have ever heard of, they involved more than just techies, but included a closing  keynote by the Mayor of Lansing and coverage by two local TV News stations.   Continuing with his style of going above and beyond, Joe has written an article  for this month&#39;s newsletter on what it takes to run a successful  CodeCamp.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt; &lt;div&gt; &lt;/div&gt; &lt;div&gt; &lt;div&gt;Read his article on &lt;a href=&quot;http://www.ineta.org/articles/HowtoHost.aspx&quot; shape=&quot;rect&quot;&gt;How to Host a Great CodeCamp&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt; &lt;div&gt; &lt;/div&gt; &lt;div&gt;&lt;strong&gt;About Joe Kunk&lt;/strong&gt;:&lt;/div&gt; &lt;div&gt; &lt;div&gt; &lt;div&gt;&lt;span class=&quot;datatitle&quot;&gt;Blog:&lt;/span&gt;&lt;a class=&quot;datalink&quot; href=&quot;http://jbknet.blogspot.com&quot; target=&quot;_blank&quot; shape=&quot;rect&quot;&gt;&lt;span style=&quot;color: rgb(129, 0, 129);&quot;&gt;http://jbknet.blogspot.com/&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt; &lt;div&gt;&lt;span class=&quot;datatitle&quot;&gt;Bio:&lt;/span&gt; Joe Kunk serves as President of the  Greater Lansing User Group for .Net (GLUGnet) with independent monthly meeting  locations in both East Lansing and Flint MI, co-founder of Listen IT Solutions  (a mortgage software company), board member of the Lansing IT Networking Council  (LINC), Senior Consultant at A. J. Boggs, Inc., and a great supporter of the  .Net community. Joe has 25 years experience in the IT industry and wrote his  first for-hire application on the Commodore Pet.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</content><link rel='replies' type='application/atom+xml' href='http://jbknet.blogspot.com/feeds/7085126663926128973/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/14404010/7085126663926128973' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14404010/posts/default/7085126663926128973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14404010/posts/default/7085126663926128973'/><link rel='alternate' type='text/html' href='http://jbknet.blogspot.com/2008/07/article-how-to-host-great-code-camp-in.html' title='Article &quot;How to Host a Great Code Camp&quot; in July 2008 INETA newsletter'/><author><name>Joe Kunk</name><uri>http://www.blogger.com/profile/08512894287202788232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14404010.post-6206054939696396864</id><published>2008-05-07T23:51:00.002-04:00</published><updated>2008-05-07T23:54:25.876-04:00</updated><title type='text'>Attending GLUGnet Flint tomorrow - see you there!</title><content type='html'>&lt;span style=&quot;font-family:arial;&quot;&gt;I will be attending the GLUGnet Flint meeting tomorrow.  Last month we packed the room and let&#39;s do it again.  Great presentation and great networking afterwards at Ruby Tuesday.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;See my prior post for &lt;/span&gt;&lt;a href=&quot;http://jbknet.blogspot.com/2008/05/glugnet-flint-mi-meeting-for-thursday.html&quot;&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;May 2008 GLUGnet Flint meeting&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;Hope to see you there!&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;Joe Kunk&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:arial;&quot;&gt;GLUGnet President&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://jbknet.blogspot.com/feeds/6206054939696396864/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/14404010/6206054939696396864' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14404010/posts/default/6206054939696396864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14404010/posts/default/6206054939696396864'/><link rel='alternate' type='text/html' href='http://jbknet.blogspot.com/2008/05/attending-glugnet-flint-tomorrow-see.html' title='Attending GLUGnet Flint tomorrow - see you there!'/><author><name>Joe Kunk</name><uri>http://www.blogger.com/profile/08512894287202788232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14404010.post-8541684357477857528</id><published>2008-05-07T00:03:00.003-04:00</published><updated>2008-05-07T00:17:40.032-04:00</updated><title type='text'>LDODN calling</title><content type='html'>&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;So am I planning a trip to London?  Or suddenly lose my ability to spell?  No, LDODN stands for the first annual Lansing Day of .Net Conference that is presented by GLUGnet on Saturday June 21, 2008.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;This event will bring together 240 technical people to learn more about the latest technologies available around the Microsoft .Net platform.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style=&quot;font-family: arial;&quot; href=&quot;http://www.dayofdotnet.org/lansing/2008/register.aspx&quot;&gt;Registration&lt;/a&gt;&lt;span style=&quot;font-family: arial;&quot;&gt; is open and space is still available. Visit the &lt;/span&gt;&lt;a style=&quot;font-family: arial;&quot; href=&quot;http://www.dayofdotnet.org/Lansing/2008/Default.aspx&quot;&gt;LDODN home page&lt;/a&gt;&lt;span style=&quot;font-family: arial;&quot;&gt; for more information.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style=&quot;font-family: arial;&quot; href=&quot;http://www.dayofdotnet.org/Lansing/2008/LDODN08SponsorshipOpportunity.pdf&quot;&gt;Sponsorship opportunities&lt;/a&gt;&lt;span style=&quot;font-family: arial;&quot;&gt; are available.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;We still have room for a few more Speakers.  If you are interested in being a Speaker at this event, see the &lt;/span&gt;&lt;a style=&quot;font-family: arial;&quot; href=&quot;http://www.dayofdotnet.org/Lansing/2008/LDODN08SponsorshipOpportunity.pdf&quot;&gt;Call For Speakers&lt;/a&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Joe Kunk&lt;/span&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://jbknet.blogspot.com/feeds/8541684357477857528/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/14404010/8541684357477857528' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14404010/posts/default/8541684357477857528'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14404010/posts/default/8541684357477857528'/><link rel='alternate' type='text/html' href='http://jbknet.blogspot.com/2008/05/ldodn-calling.html' title='LDODN calling'/><author><name>Joe Kunk</name><uri>http://www.blogger.com/profile/08512894287202788232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14404010.post-6482709502143768968</id><published>2008-05-06T23:52:00.003-04:00</published><updated>2008-05-07T00:02:30.703-04:00</updated><title type='text'>Attending West Michigan Day of .Net on Saturday May 10th</title><content type='html'>&lt;span style=&quot;font-size:100%;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;I love going to the the regional one-day user group conferences.&lt;br&gt;&lt;br&gt;Usually held on a Saturday, they are a great way to learn about new technology, see old friends and make new ones.  I have been known to drive up to 8 hours away to attend these events.  Always well worth it.&lt;br&gt;&lt;Br&gt;I will be attending the West Michigan Day of .Net on May 10th in Grand Rapids, MI.  See their web site for &lt;a href=&quot;http://www.wmdotnet.org/dodn08/&quot;&gt;more information&lt;/a&gt;.  This will be my second straight year attending this great event.&lt;BR&gt;&lt;BR&gt;Joe Kunk&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://jbknet.blogspot.com/feeds/6482709502143768968/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/14404010/6482709502143768968' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14404010/posts/default/6482709502143768968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14404010/posts/default/6482709502143768968'/><link rel='alternate' type='text/html' href='http://jbknet.blogspot.com/2008/05/attending-west-michigan-day-of-net-on.html' title='Attending West Michigan Day of .Net on Saturday May 10th'/><author><name>Joe Kunk</name><uri>http://www.blogger.com/profile/08512894287202788232</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>