TFS 2008 SP1 RTM installation problem, reason and solution

August 13, 2008

While VS 2008 SP1 and SQL Server 2008 were relatively painless to install, I run into some issues with the TFS 2008 SP1.

I’ll tell briefly my case so you can avoid this or find the solution, should you have the same reason for the problem.

The TFS 2008 is installed on a single Windows Server 2008 machine (except SharePoint) and uses SQL Server 2005 SP2.

When I tried to install the KB949786 (TFS SP1), the first part went always fine (TFS Build), but it ended in Fatal Error during the update of the actual TFS. TFS got into unusable state (clients couldn’t connect etc)

The errors in the Event Log were:

“Product: Microsoft Visual Studio 2008 Team Foundation Server – ENU – Update ‘KB949786′ could not be installed. Error code 1603. Additional information is available in the log file <file>”

and

“Product: Microsoft Visual Studio 2008 Team Foundation Server – ENU — Error 29003.TF 230001: The error mode for the Team Foundation Server Web application could not be configured properly. This problem occurred because the application root for the Team Foundation Server Web application does not exist. For more information, see the Microsoft Windows Installer (MSI) log.”

After some googling, I found similar symptoms from the MSDN Forums. Logins etc were alright in my case, so the reason was elsewhere. (Tip: don’t change TFS service accounts unless you have a very good reason and if you do, use the tools mentioned in the forum)

Finally I just had to go through the installation log and from there I found the reason:

08/13/08 10:51:15 DDSet_Status: Commandline: "C:\Windows\system32\inetsrv\appcmd.exe" set config "Team Foundation Server" -section:httpErrors -existingResponse:PassThrough -commitpath:apphost
08/13/08 10:51:15 DDSet_Status: IgnoreExitCode: 0
08/13/08 10:51:15 DDSet_Status: Silent: 0
08/13/08 10:51:15 DDSet_Status: ActionStart: 0
08/13/08 10:51:15 DDSet_Status: Cost: 0
08/13/08 10:51:15 DDSet_Status: WorkingDirectory:
08/13/08 10:51:15 DDSet_Status: HideCmdLine: 0
ERROR ( message:Cannot find SITE object with identifier "Team Foundation Server". )
08/13/08 10:51:16 DDSet_Status: Process returned 1168
08/13/08 10:51:16 DDSet_Status: Found the matching error code  for return value ‘1168′ and it is: ‘29003′
08/13/08 10:51:16 DDSet_Error:  1168
MSI (s) (B8!94) [10:51:16:127]: Product: Microsoft Visual Studio 2008 Team Foundation Server – ENU — Error 29003.TF 230001: The error mode for the Team Foundation Server Web application could not be configured properly. This problem occurred because the application root for the Team Foundation Server Web application does not exist. For more information, see the Microsoft Windows Installer (MSI) log.

I have the habit of putting server port in the names of the web sites in the IIS and I had renamed the “Team Foundation Server” to “Team Foundation Server – 8080”. The patch was obviously looking for the original name and failed because it didn’t find a web site with exactly the same name.

I just renamed the web site hosting the web services back to “Team Foundation Server”, run the patch again (without uninstalling it first) and everything went fine. :)

Microsoft, you could modify that part of the patch to search the web site with partial match or better: with some kind of unique ID of the web site instead of the name.

TFS is still very new product and it relies on so many other services and products that there are many places where something can go wrong. This is why it is better not to mess with anything directly without using official tools.


SQL Server 2008 Management Studio tip: Status bar Custom Colors

August 12, 2008

Here is a handy tip for those of you who work often with multiple SQL Server instances: Custom Colors for the connection status bar.

You have probably noticed the new status bar at the bottom of the Query windows in the new SSMS:

Khaki Status Bar

While exploring the new version, I just noticed this setting in the Connection Properties:

Sql2008 Mgmt Studio Connection Properties

Checking the box allows you to pick any color from a standard color –dialog after clicking the Select… –button.

Here is the status bar in red:

Red Status Bar

…and in green:

Green Status Bar

So what?

Now you are probably thinking: “Neat, but not a big deal. So the color can be changed. Whee! What does this guy want for this discovery? A medal? Front paged in DotNetKicks, Digg and Techmeme? 5000 2000 followers in Twitter and FriendFeed? Interview from the Louis Gray?”

Actually the point of this blog post was to tell how this feature could be used for avoiding human errors during daily administration & development.

If you are like me, you often have multiple connections open for several servers and you have to be careful to make sure you are working on the right one. Color coding the connections could help to avoid – possibly serious – mistakes.

For example, you could dedicate:

  • Green for development servers
  • Yellow for test servers
  • Red for production servers

This way you are more likely warned before accidentally executing that TRUNCATE TABLE on a production server instead of the test server you meant to…

Great thing about this feature is that SQL Server remembers your preferences per server, so you need to define the colors only once.


Visual Studio 2008 SP1 (and TFS2008 SP1) is here as promised

August 11, 2008

In the last post I hinted that the Visual Studio 2008 SP1 RTM would be available today.

It is required by the SQL Server 2008 when you want to install it on computers with Visual Studio 2008. Be sure to install the VS2008 SP1 before installing SQL Server 2008 on the same machine.

Of course, besides SQL Server 2008 support, Visual Studio 2008 SP1 includes lot’s of other exciting features like ADO.NET Data Services, ASP.NET Dynamic Data, Entity Framework (loved by many, hated by even more;) ) and much more.

You can read about the new SP1 features from here. Oh, and the SP1 for the TFS 2008 is also available :) )

Here are the links to the downloads:

Microsoft Visual Studio 2008 Service Pack 1 (exe)
http://www.microsoft.com/downloads/details.aspx?FamilyID=fbee1648-7106-44a7-9649-6d9f6d58056e&DisplayLang=en

Microsoft Visual Studio 2008 Service Pack 1 (iso, stand-alone, 831MB)
http://www.microsoft.com/downloads/details.aspx?FamilyID=27673c47-b3b5-4c67-bd99-84e525b5ce61&DisplayLang=en

Team Foundation Server 2008 Service Pack 1 (exe)
http://www.microsoft.com/downloads/details.aspx?FamilyID=9e40a5b6-da41-43a2-a06d-3cee196bfe3d&DisplayLang=en

Here are other related downloads (Remote Debugger etc):
Search From Microsoft Download Center

Credits for notifying about the update goes to johnrummel, thx :)

Updates:
SQL Server Express Edition is also available! (thx, wisemx)

Guy Burnstein has also a nice list of downloads in his blog.


SQL Server 2008 RTM available for download!

August 6, 2008

After a long wait, SQL Server 2008 RTM is finally available for MSDN and TechNet –subscribers.

Here are links for your convenience:

Can’t wait to get to install it to my dev machines… / server.

Update:

The available editions are (x86, x64. Some editions also for ia64, but who cares):

  • Microsoft Sync Framework 1.0 RTM is available now.
  • SQL Server 2008 Feature Pack is available now.
  • SQL Server 2008 Volume licensing SKU’s will be available from MVLS starting from 8/21/2008.
  • Update #2:

    Here is a link to the press release.

    Installing it now. SQL Server 2008 requires .NET 3.5 SP1 and seems like it is RTM-version, too, like it should. Visual Studio 2008 SP1 will be available during the week starting August 11th 2008.

    image

    image

    .NET Framework SP1 installation requires restart.

    While you are waiting for the download, you could read about the hardware and software requirements.

    If you are planning to install it on your development computer, you should wait for the Visual Studio 2008 SP1, coming after 8/11/2008, as described here and here.


    SQL Server 2005 Security Update (KB948109) fails to install with error code 0×773F – how to fix

    July 9, 2008

    Today I got a batch of updates via Windows Update. Most updates installed fine, but the “Security Update for SQL Server 2005 Service Pack 2 (KB948109)” failed with error code of 0×773F.

    This computer runs Windows Vista and SQL Server 2005 Developer Edition.

    There is also a named instance (MSSMLBIZ) for Outlook with Business Contact Manager (or whatever). I had disabled this instance for performance reasons as I never use the add-on. However, I had to enable and start the service through the SQL Server Configuration Manager to get the update to install.

    Then I downloaded the stand-alone security update from the Microsoft Downloads. You can find it from here: Security Update for SQL Server 2005 Service Pack 2 (KB948109). This isn’t probably necessary, as long as all the instances are running, but if you still get errors, you can check the separate log file with more verbose information.

    In short, all you need to do is:

    • Make sure all the SQL Server 2005 instances are running able to start
    • …or uninstall unnecessary instances, including hidden ones
    • Download and run the manual update

    This fixed it for me.

    Update #1:

    Make sure that you don’t have NTFS folder compression on for the folders where the database files (*.mdf, *.ldf) are located. This may prevent the instances from starting.

    Update #2:

    I just installed the patch through Windows Update on my home computer (Vista Ultimate, SQL Server Developer Edition) and it went fine (with services already stopped).

    I’m now certain that my first problem was caused by the disabled service and starting the services has nothing to do with it (as commenters has pointed out).

    One solution that I found was disabling the firewall (the error code was also different, though).

    There are probably many causes for this issue, so if you succeed to fix it, please comment here what you did, thanks :)

    Update #3:

    Updated SQL Server 2005 Standard Edition and Windows Server 2008 that hosts it. Through the Microsoft Update with no problems. Still recommend to proceed with caution on production servers before these symptoms are explained/fixed.

    Update #4:

    Found some good related discussions and solutions:

    Especially this excerpt from the first link explains the 733F:

    “Error: 733F– Services Failed to Start “From MS Support”

    “Description: This error occurs when the installation program can’t start the SQL Server services. This can happen for several reasons including: expired account password, invalid user account, user account does not have permission to start the service, or there is something else wrong with the service.”


    The future of .NET, Visual Studio and more

    May 24, 2008

    Last year I blogged about Microsoft SOA initiative “Oslo” and the first mentions of .NET Framework 4.0. Today I decided to try to find more information about what the future in the Microsoft development world will hold.

    As the information has been quite minimal, I decided to find out what kind of job postings Microsoft has listed at the moment as they reveal something of what they are planning at the Redmond. As it turns out, there are lot’s of interesting things coming in the future versions of .NET Framework, Visual Studio, SQL Server and SharePoint.

    It should be noted that the information in this post is based mostly on combination of several job listings and speculations and it shouldn’t be taken as a definite road map or truth. Projects can be combined, canceled and delayed. I’ll link to the original job posting sources, but I’m not sure how long the links will work.

    .NET Framework

    This job post reveals how there will be several SKUs of the .NET Framework:

    You would work with the .NET Framework teams in proactively identifying/consolidating redundant feature areas and in driving the core framework technologies. One of your immediate roles will be in helping us factor the .NET Framework to be more flexible, by building the right set of runtime features, such that we can ship multiple .NET Framework SKUs in an agile manner. For example, we must reach the right layering and componentization goals to ship a nimble form factor, such as the .NET SilverLight Framework (for web client) and the .NET Compact Framework (for embedded devices), then build it up to the .NET Client Framework (for rich clients) and ultimately to the full .NET desktop client (for client/server). You would establish framework life cycle, with a particular emphasis on removing obsolete features, so that we can advance the platform futuristically. You would also closely work with Visual Studio architecture team in enabling a flexible multi-framework-targeting experience.

    Source

    These days .NET Framework distributable is quite large so this was also bit expected to happen at some point. I recall reading from Scott Guthrie’s blog about this earlier. It should also be mentioned that VS2008 SP1 will bring “.NET Framework Client Profile” as mentioned in ScottGu’s post.

    Web Development, SharePoint, IIS

    Apparently some sort of media server product for Silverlight is in the works:

    Do you want to help drive the technical strategy around Web and Media technologies that will shape the internet? Do you love deep, pragmatic, and focused engineering challenges where you control the schedule? Have you ever wanted to drive a small, start-up engineering team building a code base from scratch?

    The .NET Developer Platform team is looking for a Group Manager to build Microsoft’s new media server product. This team will deliver the server-side media infrastructure and services required to stream rich media on the Web and work hand-in-hand with Silverlight running on the client. We are looking for a Group Manager who can lead a small team of 10-15 engineers to build this code base from scratch, as an integrated part of the new Web and Media platform.

    Source

    Now this is getting more interesting. It remains to be seen, if this will be a free add-on for IIS or a commercial product.

    Moving on to the SharePoint:

    Would you like to be part of the newly formed team whose charter is to develop a v1 infrastructure and tools for SharePoint platform? Would you like to invent, design, and influence a wide range of RAD developer tools for the fastest growing server product in Microsoft’s history? Would you like to work on a team that is in the early stages of execution, designing a new revolutionary set of tools? If so, the Developer Division Business Applications team is the place for you.

    Our mission is to empower professional, departmental, and end user developers to create a complete range of business solutions and customizations on the SharePoint. We are part of the Visual Studio family. One of our vNext deliverables includes a rich tool set to support Microsoft Windows SharePoint Services (WSS) and Microsoft Office SharePoint Server (MOSS) that enable developers to fully utilize Visual Studio and the .NET Framework as a development platform.

    Source

    The last paragraph is the interesting part. Anyone who has developed custom solutions on MOSS 2007 knows that it can be a nightmare. While it has a good collection of components and services, the development and deployment experience could be a lot better. I personally prefer plain ASP.NET projects as the development life-cycle is much more enjoyable and more risk-free. Hopefully these tools will make the SharePoint vNext development much more enjoyable.

    This is also very interesting as it seems to unify ASP.NET, AJAX and Silverlight development:

    Are you interested in delivering a cutting-edge technology that will revolutionize Microsoft’s developer platform? Are you looking for the opportunity to help drive several of the key value propositions of the next release of Visual Studio and the .NET Framework? The UI Framework and Services team – part of the .NET Developer Platform group, and owners of ASP.NET, ASP.NET AJAX, and Windows Forms – is kicking off a new project that will be at the heart of the developer experience for building Rich Internet Applications on Microsoft’s .NET Client platform. The goal of the project is to deliver a dramatically productive and simple experience that enables RIA developers – a key developer market – to easily build rich and powerful data-driven applications on .NET. The project will build on the huge customer excitement in Silverlight and WPF, and the success of ASP.NET, to deliver an unparalleled client developer story. The key value propositions we will deliver on are:

    1. A complete RIA platform
    2. An application model that vastly simplifies LOB application development
    3. Greatly simplify N-Tier app development
    4. Seamlessly take your RIA out of the browser

    To assist us in this project, we are looking for a strong and experienced SDE to help drive our Application Model and Services team. This team’s challenge will be to deliver an application model that makes it dramatically simple for developers to build a rich, occasionally connected, n-tier application. Team deliverables will include a new deployment model that can seamlessly take .NET-based Rich Internet Applications from the browser to the Windows desktop, a framework library that makes it incredibly easy to deliver rich occasionally connected user experiences, and a set of application building blocks like authentication and personalization that reduce the time to build rich application functionality, and integrate Rich Internet Applications with Windows, IE, and Office.

    Source

    And another related post excerpt:

    To assist us with these efforts, we are looking for a strong and experienced SDE to help drive our UI and UI Framework team. Building UI from data is at the heart of virtually every LOB application, and the team will deliver a set of rich Silverlight based controls, including a data grid, that enable new data experiences. The team will also deliver a programming model experience that makes it incredibly easy to build rich data-driven UI and visualizations. Building on innovative technologies such as Silverlight, LINQ and WPF, this team’s work will allow developers to very easily build a fully functional UI application out of data. Using the UI Framework, developers will be able to then easily customize and enrich the application by adding functionality such as navigation, editing, and validation.

    Source

    This isn’t a big secret, but it was news to me:

    Our goal this year is to get Ruby on Rails working in IronRuby. You will be expected to work on the compiler, Ruby libraries, and performance improvements. We also want to provide IronRuby support in the Visual Studio IDE. This includes editing features (color-coding of source code, intellisense, etc), debugging features (breakpoints, data tool tips), ensuring a Ruby look-and-feel (interactive console, etc), and integration into the Visual Studio project system.

    Source

    Visual Studio

    Major changes are coming to Visual Studio (some day):

    Over the next few years we plan to modernize and/or re-architect various areas of the [Visual Studio] platform where we see the greatest potential opportunities for improving the developer experience exist. These include creating a new User Interface that takes advantage of the latest in UI tools, techniques, and hardware; a robust extensibility model that helps 3rd parties extend and enhance the VS environment to improve developer productivity; an editor that is both modern and extensible and greatly improves developer code understanding; a build system that can scale to projects as large as building the Windows Operating System; and an automation model that makes it easy to automate the development environment and allow for tasks like nightly builds to be automated.

    Source

    Another posting reveals that WPF is one of the “latest UI techniques”:

    Major initiatives for this team for the next release of VS include:

    * Work with the Shell UI team to migrate portions of the VS Shell to WPF

    Source

    Visual Studio Team System

    I have just adopted Team Foundation Server 2008 and other Team System features so I’m very excited to see what’s happening on this area. Here are some finds:

    If you use Visual Studio or any other popular IDE to write code in C#, C++, VB, Java, etc. then these services are a familiar part of your development lifestyle. If you develop for any of the major SQL platforms, then the available development tools leave you relatively out in the cold. In certain respects, database development tools are fully three decades behind the curve!

    Come work for the team that is changing this with a market-shifting database development project system within Visual Studio. The mission for the team is no less than to bring tooling-support for database developers to par with that of traditional languages such as C# and C++, for the complete application lifecycle. This is a challenging charter, in a fundamentally unique problem-space. In one team you will find a broad spectrum of software development challenges from designer and user interface work, to the nuts and bolts of language parsing and cutting-edge code-modeling.

    Source

    Interesting and I have no idea what it could be in practice. ;)

    Testing will also get more tools in the VSTS:

    In the Rosario release of VSTST we have the ambitious goal of fundamentally changing the relationship between Development and QA by providing tools and workflow that make testers first class citizens in our customers’ development process. To do this, we will deliver world class Test Case Management, Test Authoring, Automation Tools and Frameworks, as well as game changing integrations within Visual Studio Team Suite.

    Source

    Distributed Applications

    These days I do integration projects and distributed programming is part of my daily life. That’s why I’m increasingly looking into WCF, WF and BizTalk as they could be part of our integration product. After reading these posts it seems that something interesting (that is, Oslo) is on the way:

    Join the Connected Framework (CFx) team and help us create the programming model central to Microsoft’s next generation of the distributed application framework. The team has recently delivered first versions of WCF (aka Indigo) and Windows Workflow, which are receiving significant customer acceptance. WCF is THE Web Services stack for Microsoft, and Windows Workflow is THE foremost declarative, process model framework. Now is a great time to join the team as we are starting to work on the next major release that consolidates and enhances these two powerful yet simple and elegant development frameworks into a single unified platform aiming for 10x productivity increase in distributed applications development.

    Source

    For the last few years, we have been on a mission to make the usage of transactions simple, fast and ubiquitous. We have made tremendous progress so far. The Systems Transactions namespace in .NET 2.0 made transactions far easier to use, with dramatic improvements in performance. We have extended the reach of transactions all the way from web services to the kernel. We authored and implemented the WS-Atomic Transactions standard. In Vista, we integrated our transactions stack with the transacted file system and registry! In Oslo, we are planning to add distributed compensation support by adding long-running transactions support to the connected framework runtime! But all of this is just the beginning. In our upcoming releases we will continue to extend our reach, from atomic transactions to long-running activities with compensation to generic agreement protocols! We will continue to make it easier to write reliable and consistent distributed applications. Most importantly, we will continue to ship regularly to get our work into the hands of customers.

    Source

    SQL Server and Data Programmability

    Do you have a passion for building state-of-the-art graphics software? Would you like to influence the direction of a key technology used across multiple Microsoft products?

    We are seeking a Lead Software Development Engineer to drive the architecture, design, and implementation of rich data visualization components – including charts, gauges, maps, and calendars – that will be included in upcoming releases of SQL Server, Visual Studio, and Office. In this highly visible leadership role, you will be responsible for managing a high performance team of software developers using the latest Microsoft technologies, including C#, ASP.NET, AJAX, Silverlight, and WPF.

    Rich data visualization capabilities are quickly becoming a requirement for modern business applications. The SQL Server Reporting Services team is on the cutting edge of this technology, creating a set of powerful and interactive data visualization components for application developers, IT professionals, and end users. We are a growing team that is passionate about creating the most comprehensive database reporting, data visualization, and notifications platform in the industry. We have an expanding customer base that has ever-increasing demands for more capabilities, and we are continuing to extend our product reach, evolve the feature set, and deliver new customer innovations.

    Source

    Those data visualization controls will be welcomed. :)

    XML tools for SQL Server/Visual Studio will be enhanced. Interesting point is that WPF and Silverlight will be part of it:

    Help build the XML Editor, XSLT Debugger and XML Editing platform for developers. The Data Programmability (DP) Tools product team is a new and growing product unit that is looking for a talented and motivated developer. We want you to help define and build state of the art tools that are distributed as part of Visual Studio and SQL Server and are used by millions of developers world-wide – hobbyists and enterprise developers alike. We value and encourage innovation and excellence in graphical tool design, usability, infrastructure, and execution. SQL Server is investing in tools. If you want to make a difference and work with state of the art technologies such as WPF, Silverlight, MEF/MAF, and help define tools standards for developers, then we would like to talk with you.

    Source

    This posting gives many interesting details about SQL Server’s future:

    SQL Server is embarking on an ambitious effort to rejuvenate the T-SQL language and to embrace all the programming models in the data platform – relational, spatial, full text, xml and entities. This involves all aspects of the SQL programming surface from designing procedural extensions to the language, to improving the cursor model, to enhanced metadata discovery, to application packaging, to building a new compiler for T-SQL, to building extensibility into SQL Server. And this is just a sampling of the problems for which you will need to design and help build good solutions. In addition, this effort will require you to work on and influence Microsoft’s Data Platform Strategy.

    Source

    Last notes

    As you can see, many interesting tools and technologies are on their way in the next few years. My research method was very random and the job postings don’t reveal much, but I’m sure that we’ll get more information in the coming months.

    However, the pattern already shows that many coming features build on existing components and aim to unify the development experience by combining them in many ways.

    It seems that there will be much more graphical designers, DSLs and other modern ways of generating applications. This will split the opinions as many developers prefer to code in the traditional way, but I’m sure there will be something for everybody – I probably found just a few interesting bits out of many!

    From my view point the most interesting finds were:

    • UI developers will get the Application Framework(?) that combines the WPF, Silverlight and ASP.NET technologies.
    • SharePoint development experience will be tolerable, perhaps even fun.
    • Distributed developers will get the Connected Framework(?) that builds on WF and WCF.
    • Productive LOB-application tools that utilize latest UI-technologies (Silverlight, WPF) with little or no code.
    • SQL Server will get major changes to T-SQL and new XML tools.
    • Visual Studio will be enhanced in many, innovative ways with technologies like WPF.
    • Visual Studio Team System will make database development more integrated with the development process. Testing will get more tools.

    Do you have any rumors to share?

    kick it on DotNetKicks.com


    Windows Server 2008 – Upgrade tips

    February 10, 2008

    Windows Server 2008 -logo

    Last night I finished upgrading Windows Server 2003 to the Windows Server 2008. Here are some tips to help those of you facing the same challenge. I had some problems along the way that I could have avoided with more careful planning, but live and learn.

    As I use my server only for personal development purposes, it is not that critical as a real production server would be. Anyway, good preparation makes things easier. I chose to do a “clean” installation, as I wanted to install the Windows Server 2008 to a bigger volume.

    This is a long post, but if some part helps someone even a bit, it serves its purpose. I’ll cover these tips:

    1. Make a checklist for yourself
    2. Backup and copy everything to a safe place
    3. Prepare post-installation setups
    4. Check your hardware compatibility
    5. Post installation tasks
    6. Installing and configuring applications

    Disclaimer: Please remember, that I’m more of a developer/software architect kind of guy than an IT professional who maintains servers full time. I just admin my own servers and desktops when I need, so not all of my tips may be the best practices.

    1. Make a checklist for yourself

    Before getting your hands dirty, list all the things you have to take into consideration. I used Microsoft Office OneNote 2007 to take my notes. My server is a typical web server with SQL Server so this post mostly revolves around related things.

    OneNote Checklist

    In the checklist I listed things like:

    1. What should be backed up
    2. What sites and application pools I have in IIS6
    3. How do I migrate databases in SQL Server 2005
    4. What other applications I have and what should be reinstalled
    5. How should I backup and restore contents in the Windows SharePoint Services
    6. Screen captures from various settings pages (IP-settings, IIS, local users, file shares)

    I should have checked these things, too:

    1. What hardware the server has and is it supported
    2. Get the latest drivers for Vista and Windows Server 2003, if there are no native Windows Server 2008 drivers.

    2. Backup and copy everything to a safe place

    After you have made at least some plan, execute it by copying all the settings, files, databases etc to a place that can be easily accessed after upgrade.

    Also, if you have some external USB drive, copy them there. I had lazily put most of the backups and post-installation setups to the backup raid that required drivers to work. If I wouldn’t have been able to get it to work, I could have been in trouble. Separate USB disk would have been safer and compatible whatever happened.

    Here are some detailed tips:

    SQL Server 2005: I detached the databases and attached them after installation of the new Windows Server. There were only few important databases, so this was faster way than the backup/restore -way. If you want to move your logins, scheduled jobs and other database server wide-stuff, remember to backup at least master and msdb -databases. If you do it manually like me, make sure you know or can locate the passwords for the logins that your apps. may use (connection strings etc).

    IIS6: There are some tools that help migrating the database, like the new MS Deploy -tool. I considered using it, but I couldn’t install it since it required .NET Framework 2.0 SP1 that wouldn’t install on my Windows Server 2003 for some reason. So I decided to manually copy everything and configure them in IIS7.

    WSS: I only use Windows SharePoint Services v3 to sync my OneNote -notebooks between work and home, which is very handy (I’ll try to blog about it later). After checking the sites and their contents, I decided that again it is easier to copy the files manually and setup the few sites I have manually.

    First I considered backing them up with the stsadm, but then I noticed that due to DNS/router configuration, I couldn’t actually access the WSS from the localhost and fixing it would have taken more time than manual way for that small amount of data.

    DNS server: I just copied the %systemroot%\system32\dns -folder to safe place.

    3. Prepare post-installation setups

    Remember to think through the whole process. Backing up the data and installing the Windows Server 2008 is only half of the process and what follows is re-installing the applications you need.

    This will be much easier and faster if you reserve all the setups, service packs and product keys to one place.

    If you are going to install applications from an .iso-image, you’ll need some program that can access them from the Windows Server 2008. I have been a long time user of the Daemon Tools, but over the last few years I have liked it less and less (ad-ware, reboot during installation, problems in Vista etc). I decided to try the free MagicISO, which works fine for me in Windows Server 2008.

    4. Check your hardware compatibility

    This may sounds obvious, but actually I neglected to do this, since:

    • a) I haven’t had driver issues for a long time with Windows so I took it for granted that everything would just work
    • b) Installation on the virtual server went so smoothly – though on a different computer.

    My server is built from old computer parts so it has actually some very old parts, now that I think about it. What was supported out of the box in Windows Server 2003 isn’t necessarily supported in the Windows Server 2008.

    When troubleshooting my issues, I came across Windows Server catalog of tested products -site, where you can get some idea about supported hardware and software. Remember, many things have changed during the last 5 years and some of my components were old even then :D

    Here is the hardware that caused problems for me:

    1. I had no DVD-drive on my server :D This hit me first as I hadn’t even considered it could be an issue. The server had some old SCSI CD-ROM drive but as the Windows Server 2008 comes on a DVD-image, it didn’t help much. Luckily I found some old IDE-DVD-ROM that worked fine.
    2. Windows Server 2008 didn’t recognize my Adaptec AHA-2940UW -SCSI adapter. This hit me when I got to the part in the setup where I was supposed to choose the hard disk – Setup didn’t find any :S Windows Server 2003 drivers didn’t work, but luckily Vista drivers worked. I put them on an external USB hard disk where it found them and I could continue.
    3. Finally, I have a backup mirror raid setup on Promise FastTrak TX2000 controller. It wasn’t recognized automatically, either, but after installation I got it to work through the Device Manager with Windows Server 2003 -drivers. Phew.

    So, before starting the installation, take note of your hardware (especially legacy ones) and put the drivers to some easily accessible location, like some USB-disk or thumbdrive.

    5. Post installation tasks

    Except for the driver problems above, rest of the setup went without hitch. What happens next is the initial things to do after logging in.

    First you should configure the computer name, domain/workgroup, IP-settings, virtual memory, users etc. This is easily done in the Initial Configuration Tasks -tool that collects everything together. Sweet. Changing of the computer name requires still rebooting, bummer. This was one place where the screen captures of IP-settings etc helped. I haven’t memorized my external DNS-addresses, for example.

    Next you need to choose which server roles you want. This is subjective to your needs, but I decided to go with the following developer-oriented roles:

    My server roles for Windows Server 2008

    It is also a good idea to take captures of the settings, should you need them later, like in disaster recovery. After that you can choose which features to install.

    Activating the Windows Server 2008

    I like how you don’t need to enter the product key during the installation, but how it is done after the installation. It makes the installation experience much smoother and faster, as the awkward typing of the long key doesn’t cut the flow.

    After the installation I tried to activate the Windows Server 2008, without first entering the product key. I was greeted with obscure “Activation Error – DNS Name does not exist” -error. If you get the same error, enter the product key first and then try activation again.

    6. Installing and configuring applications

    Finally, after you are satisfied with the configuration of the Windows Server 2008, it’s time to install the applications and updates.

    After installing the MagicISO, I installed SQL Server 2005. Windows warns about the compatibility, but mentions that you’ll be fine if you install SQL Server 2005 SP2 afterwards.

    To take advantage of all the sweetness that the .NET Framework 3.5 offers, I also installed that. You can download the full setup package from here. If you prefer the web install for some reason, it can be located from here.

    IIS7 is one of the features I have waited most and after setting up the database server and accounts, it was time to configure the web server. As the GUI has changed a lot, it may take some time to get used to it, but eventually you’ll find the settings you need. IIS.net is a good place for hints.

    I just made sure that I got all the most critical applications to work, but I have still some tasks left to do. Anyway, the hardest part is now behind and the fun is about to start as I can now concentrate on the new features offered by this great platform. I’m especially fascinated about the IIS7 extensibility and what it could be used for tuning the web apps, but that’s an another story.

    I’d like to hear about your Windows Server 2008 experiences. Did you have any problems or do you have some tips to share?

    kick it on DotNetKicks.com


    Using extension methods with a data reader

    February 1, 2008

    Extension methods help making many routine codes much cleaner and simpler. In this post I’ll show how I use extension methods with classes that implement IDataReader such as SqlDataReader. I’ll also throw in some examples how to convert fields to enums etc tips for usual needs.

    While LINQ is now the coolest kid in the block, the oldskool data readers are still the most efficient way for most cases and every now and then I still use them.

    When you loop through the data reader, you have to convert each column into right type. For example:

    SqlDataReader reader;

    reader = sqlCommand.ExecuteReader(CommandBehavior.SingleRow);

    reader.Read();

    product.ProductID = Convert.ToInt32(reader["ProductID"]);

    Converting data with a helper class

    Typically I moved the conversion to some helper tools class to encapsulate and unify the conversion:

    public static class Tools

    {

    public static int GetInt(IDataReader reader, string column)

    {

    if (reader[column] != DBNull.Value)

    {

    return Convert.ToInt32(reader[column]);

    }

    else

    return 0;

    }

    With that helper method the code would look something like this:

    product.ProductID = Tools.GetInt(reader, “ProductID”);

    product.ProductName = Tools.GetString(reader, “ProductName”);

    product.UnitPrice = Tools.GetDouble(reader, “UnitPrice”);

    product.Discontinued = Tools.GetBool(reader, “Discontinued”);

    This looks better and if I need to change the rules I can do it in one location. Still, there is a bit nicer way after the extension methods came with .NET 3.5.

    Converting data with extension methods

    I won’t go through the basic examples about what the extension methods are, as there already is plenty of those examples in the web. Without further ado, here are some of my extension methods for the IDataReader:

    public static class DataReaderExtensions

    {

    public static int ToInt(this IDataReader reader, string column)

    {

    if (reader[column] != DBNull.Value)

    {

    return Convert.ToInt32(reader[column]);

    }

    else

    return 0;

    }

    public static Guid ToGuid(this IDataReader reader, string column)

    {

    if (reader[column] != DBNull.Value)

    {

    return new Guid(reader[column].ToString());

    }

    else

    return Guid.Empty;

    }

    public static DateTime ToDateTime(this IDataReader reader, string column)

    {

    if (reader[column] != DBNull.Value)

    {

    return Convert.ToDateTime(reader[column]);

    }

    else

    return DateTime.MinValue;

    }

    //This converts an integer column to the given enum (T)

    public static T ToEnum<T>(this IDataReader reader, string column)

    {

    if (!typeof(T).IsEnum)

    {

    throw new ArgumentException(typeof(T).ToString() + ” is not an Enum”);

    }

    return (T)Enum.ToObject(typeof(T), reader.ToInt(column));

    }

    I put only some examples to get the idea through, but with similar pattern you can easily add support to all the types you need.

    After that I can convert the columns with less code:

    //product.ProductID = Tools.GetInt(reader, “ProductID”);

    //product.ProductName = Tools.GetString(reader, “ProductName”);

    //product.UnitPrice = Tools.GetDouble(reader, “UnitPrice”);

    //product.Discontinued = Tools.GetBool(reader, “Discontinued”);

    product.ProductID = reader.ToInt(“ProductID”);

    product.ProductName = reader.ToString(“ProductName”);

    product.UnitPrice = reader.ToDouble(“UnitPrice”);

    product.Discontinued = reader.ToBoolean(“Discontinued”);

    The difference might not seem that big, but when typing that routinely line after line, you’ll notice the difference. It is also easier to read.

    How about enums?

    Earlier I showed the code of ToEnum<T> -extension method that converts an integer (usually primary/foreign key in a table) to an enum.

    Let’s say I have Product -type and Category-enum like this:

    public class Product

    {

    public int ProductID { get; set; }

    public string ProductName { get; set; }

    public double UnitPrice { get; set; }

    public bool Discontinued { get; set; }

    public Category Category { get; set; }

    }

    public enum Category

    {

    Beverage = 1,

    Condiments = 2

    }

    I can convert the foreign key in the Products -table into Category -enum with the extension method, if the ID’s of the primary key match in the Categories -table:

    product.Category = reader.ToEnum<Category>(“CategoryID”);

    Think big – add the extension method to interface or base-type

    Here is signature of one extension method:

    public static int ToInt(this IDataReader reader, string column)

    First comes the type you want to extend (IDataReader) and after that one extra parameter, if needed (column name in this case).

    For the type parameter, I have chosen IDataReader. I used to have SqlDataReader, but then I realized that these extension methods would work with any data reader, as long as it implements the IDataReader. This made them more reusable, though I rarely use other than SqlDataReader.

    Here I made sure that the extension methods work with native .NET readers that implement the IDataReader:

    public static void Test()

    {

    int pid;

    SqlDataReader sqlReader;

    pid = sqlReader.ToInt(“ProductID”);

    OleDbDataReader oleDBReader;

    pid = oleDBReader.ToInt(“ProductID”);

    OdbcDataReader odbcDataReader;

    pid = odbcDataReader.ToInt(“ProductID”);

    DbDataReader dbDataReader;

    pid = dbDataReader.ToInt(“ProductID”);

    OracleDataReader oracleReader;

    pid = oracleReader.ToInt(“ProductID”);

    }

    Extension methods aren’t really that confusing

    The blue arrows and the tooltip in the intellisense menu reveal that those are just extension methods, if you are afraid that somebody gets confused:

    image

    Conclusion

    Extension methods help to make the .NET Framework more usable to your needs. Downside is that you’ll easily get dependent on them, but just add them to your common tools -class that you can attach to your own projects and they’ll tag along.

    In projects related to work they may require some team-wide agreement, but the same applies to all the other helper classes, too.

    kick it on DotNetKicks.com


    Announcing articles section in blog.jemm.net

    January 11, 2008

    Now that I have at least some content in my articles section of my blog, I dare to spam post about new additions.

    I just added a new how-to-article in the databases category:

    How-To: Using SQL Server 2005’s OUTPUT to return generated identity

    Previous articles are:

    How-To: Common Data Patterns with LINQ to SQL
    Best Practices: Database Connections

    From now on I’ll mention article updates in blog posts like this. That way those of you reading this blog through the rss-feed get notified about the new articles without visiting the site.


    Stored Procedures vs. Dynamic SQL – The never ending debate?

    January 6, 2008

    One of the recurring discussions among developers of data-driven applications is the choice between stored procedures and dynamic SQL.

    Last time I stumbled upon this subject was when I started reading this post about NHibernate at Karl Seguin’s blog. Years ago one of the longest discussion was caused by this post from Frans Bouma. This is an another typical post about the subject I saw today.

    I’m not going to start another rant about which is the right choice for everything, as there simply isn’t any ultimate answer. Deep Thought could argue with this, but the answer would probably take millions of years, so who cares. ;)

    Use object-relational mapping for the generic stuff

    My recommendation is to use dynamic SQL for the most database access methods (say, 80-90%), when coupled with a solid object-relational mapping tool or some code generation tool.

    Especially with large databases that have many tables it wouldn’t be wise to code all the SQL by hand (sprocs or inline). Add tight schedules and changing requirements/database schemas and long days are guaranteed.

    Usually majority of the data-access methods for normal, transactional databases are basic CRUD-operations, so why bother coding sprocs when they don’t bring any advantages?

    Better choice is to use LINQ, Entity Framework or a good third-party object-relational mapper to reduce routine coding and to get lazy-loading etc.

    Use stored procedures for the heavy stuff

    No matter how useful OR-mappers can be, I still think that for the rest of the data access (the remaining 10-20%) stored procedures are a better option.

    For complicated queries like searches and reports you often need more sophisticated SQL than what the generic tools can generate. I’m talking about queries or updates that span many tables, aggregate data or those that would require lots of round-tripping when using dynamic SQL and other client-side alternatives.

    Of course you can combine all the data from automatically generated collections, but it would mean very chatty way to collect the data. With sprocs you can often get all the required information in one access to the database.

    In cases like these it is better to fire up the good old Management Studio (or Query Analyzer) and optimize the queries for better results. While tuning, you can easily check the Execution Plans, index usage and logical reads (with STATISTICS IO option on).

    I’m not saying that stored procedures are always automatically faster than similar dynamic SQL-clauses (they are not). My point is that manual tuning SQL by hand brings more performance as long as you know what you are doing. Crappy SQL in stored procedures (cursors, temp tables etc) won’t bring any benefits. Also, business logic belongs to the business logic layer.

    When you notice that some part of the application is performing slowly, moving and optimizing that part of the code as a stored procedure could help. SQL Server Profiler is a good tool for finding slow-performing queries.

    Conclusion

    Like with almost everything, choosing the right tool for the right job applies here as well. Better get the best of both worlds than choosing blindly one over other.

    For normal (CRUD) database operations, use object-relational mapping. However, make sure that the tool can use sprocs when needed or write helper classes for sproc-access manually as sometimes it is better to optimize the queries manually.