Click to Rate and Give Feedback
Articles by this Author
Host a wiki the easy way, get the screen shots you need and mark them up, and read about LINQ this month in Toolbox.

By Scott Mitchell (July 2008)
This month test your web site on many platforms and browsers without setting up a test environment, use mock objects for unit testing, and visit Raymond Chen.

By Scott Mitchell (June 2008)
This month the Toolbox column takes a look at database logging, Joel Spolsky's blog, printing code projects, and ASP.NET reading.

By Scott Mitchell (May 2008)
See how to log Web application errors for better health monitoring, what to read if you’re thinking about LINQ, and which blog Scott recommends reading this month.

By Scott Mitchell (April 2008)
This month, a better design-time experience for Web apps, Scott Guthrie's blog, extending Extend Lutz Roeder's Reflector, and more.

By Scott Mitchell (March 2008)
This month, more of the tools you need to get your job done.

By Scott Mitchell (December 2007)
This time: Windows Forms grids, professional-looking date textboxes, file merging, and more.

By Scott Mitchell (November 2007)
This month's products include DatabaseSpy, FileZilla, NCache, and more.

By Scott Mitchell (October 2007)
More ...
Popular Articles
Learn how to automate custom SharePoint application deployments, use the SharePoint API, and avoid the hassle of custom site definitions.

By E. Wilansky, P. Olszewski, and R. Sneddon (May 2008)
Microsoft Robotics Studio is not just for playing with robots. It also allows you to build service-based applications for a wide range of hardware devices.

By Sara Morgan (June 2008)
Howard Dierking talks to the inventor of C++, Bjarne Stroustrup, about language zealots, the evolution of programming, and what’s in the future of programming.

By Howard Dierking (April 2008)
Learn how you can peer-enable business applications by allowing them to share state in a serverless peer network.

By Kevin Hoffman (July 2008)
More ...
Read the Blog
SQL Server Data Services (SSDS) is a robust, scale-free data service that internally uses proven SQL Server technology and exposes its functionality over industry standard Web service interfaces. In the July 2008 issue of MSDN Magazine, David Robinson introduces ...
Read more!
Windows Presentation Foundation (WPF) offers excellent support for managing the display and editing of complex data. In the December 2007 edition of MSDN Magazine, John Papa did a great job of explaining essential WPF data binding concepts. ...
Read more!
The most fundamental form of Web testing is HTTP request/response testing. This involves programmatically sending an HTTP request to the Web application, fetching the HTTP response, and examining the response for an expected value. In the May 2008 issue of MSDN Magazine, Read more!
In the November issue of MSDN Magazine, Jeffrey Richter demonstrates some recent additions to the C# programming language that make working with the APM significantly easier. In the June ...
Read more!
The July 2008 issue of MSDN Magazine is now available online. Here's what's in the issue: Data Services: Develop ...
Read more!
The June 2008 issue features the first installment of a new MSDN Magazine column on software design fundamentals. We’ll discuss design patterns and principles in a manner that isn't bound to a specific tool or lifecycle methodology. In this issue, Jeremy Miller starts the Patterns in Practice column ...
Read more!
More ...
Toolbox
Database job scheduling, Browser Analysis, and More
Scott Mitchell

Database Job Scheduling Support
From a developer’s perspective, once a database’s schema has been defined and the tables, stored procedures, and other database objects have been created, it can be forgotten, abstracted away into the data access layer of the application’s architecture. DBAs, however, know that databases require ongoing maintenance. Backups need to be made on a reasonably recurring basis; for heavily loaded servers, statistics need to be manually updated during off-peak hours, and so on. Old data might be moved on a weekly basis from the production database to a reporting database or deleted altogether if no longer needed. Even application-level background tasks may be implemented as jobs at the database level.
Microsoft® SQL Server™ has long offered the SQL Agent tool for defining and scheduling SQL Server jobs. With SQL Agent you can define a job as a series of transact SQL statements, operating system commands, replication commands, and so on, and then schedule the job to run on a schedule and optionally specify whether to notify any operators based on the job’s status. Unfortunately, SQL Agent does not ship with SQL Server 2005 Express Edition. It isn’t designed for large applications, but because it’s free to use and redistribute, it’s often a database of choice for small Web sites and micro-ISVs.
For those companies using the Express Edition or for DBAs in training, Express Agent, from Vale Software, brings SQL Agent-like support to the SQL Server 2005 Express Edition. Express Agent is composed of two applications: Job Builder, a client program for designing and scheduling jobs; and a server program that runs as a service and executes the scheduled jobs, notifying the operator(s) as needed.
Express Agent’s client user interface is quite similar to SQL Agent’s. After connecting to a database, you can review the current jobs (seeing their most recent execution date and status), create new jobs or modify existing ones, and execute existing jobs immediately.
Express Agent doesn’t offer the complete set of options found in SQL Agent. There’s no support for alerts, for example, and some of the available job step features are lacking due to the limited feature set in SQL Server 2005 Express Edition. In addition to the standard job, schedule, and notification support, Express Agent also offers the ability to export and import jobs, and a wizard for scheduling recurring backups.
Express Agent provides a clean, intuitive user experience that closely mimics the experience found in SQL Agent. For those using SQL Server 2005 Express Edition who need job scheduling support, or for database administrators interested in a cost-effective way of exploring job scheduling in SQL Server 2005, check out Express Agent.
Price: $79 for a single user license.

In-Depth Browser Analysis
The lack of control over the end user’s environment greatly complicates designing Web sites. Visitors to your Web site are likely to have different operating systems, different browsers, different screen resolutions, and different browser settings. A well-designed Web site should be able to determine whether a user’s browser supports the site’s minimum system requirements, and display a message indicating such rather than letting the user interact with a site that was not designed to support their setup.
When a browser requests a Web page, it sends along with the request a User-Agent string identifying the type and version of the browser and the operating system. This User-Agent string can then be examined by the server application to determine the baseline functionality for the particular browser. For example, from the User-Agent string you might determine that a user is visiting with Microsoft Internet Explorer® 5.0 on Windows® XP—a browser that supports cookies and JavaScript.
ASP.NET includes a list of User-Agent strings and their capabilities, which can be programmatically referenced through the Request.Browser property.While the Request.Browser property provides some usefulness, it suffers from two main drawbacks. First, the information that ASP.NET uses that ties a browser’s User-Agent to its baseline capabilities is only updated when a new version of ASP.NET ships. In the meantime Mozilla may have released a new browser, or Internet Explorer 7.0 may have come out of beta, thereby introducing new User-Agent strings that are not fully known by ASP.NET. Second, the browser capabilities in ASP.NET only list the baseline functionality for the browser and do not take into account any settings changes made by the user.
To perform more in-depth browser analysis, you’ll need to turn to a third-party component, such as BrowserHawk 9.0, by cyScape Inc. With just a couple of lines of code, BrowserHawk can determine not only the basic browser capabilities—the browser type, major and minor version, whether it supports JavaScript, and so on—but also more detailed, extended properties, such as whether the user has disabled JavaScript support, the browser’s width and height, the time zone difference between the client and server, whether the user is blocking popups, whether Flash, Acrobat, or other software is installed, and so on.
BrowserHawk uses Browser Definition Files (BDF) that define expressions that match against known User-Agent strings. These files include matches not only for browser User-Agents, but also User-Agents for common search engine spiders. The BrowserHawk Editor makes searching and modifying the BDF list as easy as pointing and clicking. Furthermore, to ensure your BDF information stays up to date, cyScape maintains this information on their server, and BrowserHawk can be configured to periodically download this data.
Other nice features include the ability to log browser details to a database without having to write a lick of code, and being able to determine a visitor’s connection speed and provide more accurate estimates as to how long it will take a user to download a particular file. While BrowserHawk’s gaggle of features is impressive, what’s most pleasing about working with this tool is its ease of use. Installation is a snap, working with the BrowserHawk Editor is intuitive, and determining a visitor’s capabilities can be accomplished with just a short few lines of code. To top it off, BrowserHawk is available for Web sites using classic ASP, ASP.NET, ColdFusion, and JSP.
If you need a foolproof way to determine or log your visitors’ browser capabilities, BrowserHawk may provide the support you’re looking for.
Price: $524 for the professional edition and one year of User-Agent list updates.

Add Search to Your Web Site
As the quantity of content on the Internet has continued to increase exponentially, Web surfers, both novice and experienced, are quick to turn to search engines to find the needle in the haystack. With search becoming an ingrained reflex, it’s increasingly important that Web sites offer their visitors a fast and accurate way to search the site’s content. Without search, you may attract users to your site, but if they can’t find what they’re looking for they’ll turn to Google, MSN®, or Yahoo!, leaving your site in the dust.
Search features can be added to a Web site using any one of a number of techniques. If the bulk of your Web site content is in a database, you can enable full-text indexing and issue the user’s search queries directly against the table. For sites with mainly static, file-based content, Microsoft Index Server may be a viable option. For large, enterprise-level Web sites there are hardware-based solutions, such as Google’s Search Appliance. None of these options, however, are very attractive if you run a small- to medium-sized Web site and don’t have the interest or expertise to configure Index Server or create your own search solution.
Thankfully there are affordable, commercial products like UltimateSearch by Karamasoft that can add search capabilities to your Web site without any database setup, Index Server tuning, or coding. UltimateSearch indexes the directories and file types specified in a configuration file and stores the index both on disk and in memory.
A host of configuration options can be set including specifying files or directories to ignore and words or phrases to omit from the index. This index is automatically refreshed periodically (as specified by a parameter in a configuration file) and can be manually reindexed as well. Furthermore, the indexing performs file system-based scans for static content and crawls HTTP requests for dynamic content. That means your site will be correctly indexed whether it has hundreds of separate Web pages or just a single ASP.NET page that loads different content based on querystring parameters.
In addition to its indexing capabilities, UltimateSearch provides two ASP.NET server controls to assist in integrating the search functionality into your Web site. One control renders a user interface for the search, while the second displays the results. The first provides a bevy of properties for customizing the appearance, including a "suggest" option that, when enabled, displays a dynamic dropdown list of matching search terms that automatically updates as the user enters characters into the search box. There’s also a built-in administration page that lists pages in the index and the indexed terms.
UltimateSearch is clearly designed to be a quick and easy way to add search capabilities to your Web site, and stresses ease of use over in-depth functionality. Adding UltimateSearch to your Web site and adding a site-wide search box can be accomplished in a few seconds, but more involved tasks, such as configuring different index settings for different portions of the Web site or manually modifying the index, are beyond the reach of UltimateSearch.
Price: $249 for a developer license.

Send your questions and comments for Scott to  toolsmm@microsoft.com.

All prices were confirmed at press time and are subject to change. The opinions expressed in this column are solely those of the author and do not necessarily reflect the opinions of Microsoft.
Scott Mitchell, author of numerous books and founder of 4GuysFromRolla.com, is an MVP who has been working with Microsoft Web technologies since 1998. Scott is an independent consultant, trainer, and writer. Reach him at Mitchell@4guysfromrolla.com or via his blog at ScottOnWriting.NET.

Page view tracker