Presenting SQL Server 2005 2008 Full Text Searching at TechMixer University

On August 19th, 2008 I am presenting “Getting Started with SQL Server 2005/2008” at the TechMixer University conference that is taking place between in Birmingham Alabama. This post will have all the links relevant to my talk.

Detailed descriptive material can be found on my blog, ArcaneCode.com, with links to specific posts below.

First off, the slides and sample code can be located at the Code Gallery site I setup specifically for Full Text Searching with SQL Server:

http://code.msdn.microsoft.com/SqlServerFTS

Look on the downloads page to see various projects around SQL Server Full Text Searching. I’ve created one “release” for each of the projects around FTS. Be sure to look on the right side at the various releases in order to see the various projects.

Next, you can get started with the basics by reading these entries on my blog:

Lesson 0 – Getting the Bits to do Full Text Searching in SQL Server 2005
Lesson 1 – The Catalog
Lesson 2 – The Indexes
Lesson 3 – Using SQL
Lesson 4 – Valid Data Types
Lesson 5 – Advanced Searching

After that you’ll be ready for some advanced topics.

Can you hear me now? Checking to see if FTS is installed.
Exploring SQL Servers FullTextCatalogProperty Function
Using the ObjectPropertyEx Function
Using FORMSOF in SQL Server Full Text Searching
Creating Custom Thesaurus Entries in SQL Server 2005 and 2008 Full Text Search
Creating and Customizing Noise Words in SQL Server 2005 Full Text Search
Creating and Customizing Noise Words / StopWords in SQL Server 2008 Full Text Search
Advanced Queries for Using SQL Server 2008 Full Text Search StopWords / StopLists

SSIS Issue From Monday

Just a quick update today, due to being swamped with meetings and travel. We managed to resolve the SSIS issue from Monday by applying SQL Server 2005 Service Pack 2.  So if you encounter a “Scripts failed to load” error, verify which service pack your SQL Server is on.

WOW!

With taking vacation the first week of the month, and having three different user group meetings last week (one of which I presented at) I’ve gotten a little behind in my podcast listening. After work yesterday I was cutting my grass and using the time to finally get up to date on my listening.

I was putting away the mower when last week’s Run As Radio came on my player. You can imagine my shock when all of a sudden I hear Greg and Richard say my name! I’m surprised I didn’t fall over right there in the pile of grass clippings.

Back when they were at Tech Ed I had done a small blog post on the show, which Greg found and you can read at https://arcanecode.wordpress.com/2007/06/15/arcane-fun-fridays-run-as-radio/ . Greg also sent me a nice e-mail.

I took the time to respond, and then to be honest got busy and forgot about it. So it was quite a rush to hear my message read on the air. To address a few quick points about it…

Yes, I do admit I was simplifying a bit when I talked about server admins/DBA and their domains, but I still feel that it’s the developer who has to glue all of those services together. Don’t overlook those guys though, if you work with them they can be a developer’s best friend. I know at our work place I’ve worked quite closely with the DBA group, they are extremely helpful when it comes to things like database design and optimizing queiries.

I also want to reiterate my point that all developers should have at least a basic understanding of the way other areas of IT work. That’s why I was so thrilled when Pwop came out with Run As Radio, it is a great resource to fill in that gap in my education. Now if we could just get them to do a show on SQL Server!

If you want to listen to the show yourself, it’s show number 14:

http://www.runasradio.com/default.aspx?showNum=14

Finally I’d like to announce a new feature of the blog, Arcane Lessons. Because of the technical nature of my writing, a lot of topics get broken up over multiple posts, over several days. It can make it a bit difficult to make sure you’ve gotten everything.

To solve that I’ve added a new page I’m calling Arcane Lessons. It lists the topic, then all the posts I’ve done for that topic. Take a look by clicking the “Arcane Lessons” link at the top of the page, or add https://arcanecode.wordpress.com/arcane-lessons/ to your favorites.

Currently I have three up there now, “Getting Started with SQL Server 2005 Full Text Searching”, “Windows Services in C#”, and “Event Logging”. Be sure to check back, I have many more I’ll be adding over the next few weeks such as the “SQL Server Compact Edition” series, or the “Installing Ubuntu under VirtualPC” series.

Arcane Fun… Saturdays?

Sorry for missing my usual Friday post, I was having ISP issues (which are still unresolved, but I’ve done a workaround for now).

This weekend I’ll be participating in something very geeky, it’s called Field Day. Each year on the fourth full weekend in June amateur radio operators (you may have heard them called “Hams”) get together to practice their emergency response preparedness, fellowship and have a good time.

The idea behind Field Day is for the hams in a community to gather at a single location, setup radios, equipment, run off of emergency power, and generally practice what we would do in case of an emergency. At the same time my local clubs are gathered, other clubs will be gathering in their communities as well. We’ll then get on the air and communicate with each other, exchanging brief messages similar to what we would do in the event of a real emergency.

This preparedness has already paid off, several times. In the days after 9/11 amateur radio was the chief form of communication. More recently, the hurricanes that devastated Louisiana, Mississippi, and parts of Alabama provided a wide scale communications effort. For months it was amateur radio that provided the communications links between emergency responders as well as relief agencies like the Red Cross and United Way.

In this day and age you might be thinking “is amateur radio still around? I thought cell phones and the internet got rid of it?” Not so. Most amateur radio equipment can be setup with a minimum of requirements. A decent 12 volt battery, the radio, and some wire in a tree and the radio operator is in business. The internet doesn’t work so well without power, and the cell phones don’t seem to work to well after a hurricane knocks the cell towers onto the ground.

Community education is the other component to Field Day. Often we gather in public places like parks so that we can be seen by folks driving or walking by. This year my clubs, the Shelby County Amateur Radio Club and the Birmingham Amateur Radio Club are joining forces and will be at Oak Mountain State Park near the fishing lake. I’m sure in your community hams will be gathering too.

If you happen to be out and about and see a bunch of guys bent over radios, wander up and say hello. They’ll be glad to show you around, maybe even let you get on the air. There’s nothing quite like the thrill of picking up a microphone and realizing the guy you are talking to is on the other side of the planet, then realizing the only thing making it happen is the little box in front of you and a piece of wire strung up in a tree! Who needs the internet anyway?

Dictionaries in C#: The SortedList

There are times when you need to sort your collection easily. Fortunately, there is a special dictionary called the SortedList to handle these needs. The SortedList is part of the System.Collections.Specialized library (don’t forget your using reference!).

There is one thing to understand that is a bit counter intuitive. The SortedList sorts off of the Key, and not the Value. While this may not seem natural, it can work to your advantage in times when users want to have peculiar sort orders. You can store the odd sort in the key, then display the values to the users.

In my simple example below, I’ve created a SortedList of the artists I might listen to during a day of programming. To make the sort case insensitive, I entered all the keys in lower case, then the value is the artist name in normal type.

      SortedList myMusic = new SortedList();

 

      myMusic.Add(“zztop”, “ZZTop”);

      myMusic.Add(“midnight synidicate”, “Midnight Syndicate”);

      myMusic.Add(“kate bush”, “Kate Bush”);

      myMusic.Add(“bond”, “Bond”);

      myMusic.Add(“clint black”, “Clint Black”);

      myMusic.Add(“queen latifah”, “Queen Latifah”);

 

      foreach (DictionaryEntry favoriteArtist in myMusic)

      {

        Console.WriteLine(favoriteArtist.Value);

      }

 

Produces this output in the command window:

Bond
Clint Black
Kate Bush
Midnight Syndicate
Queen Latifah
ZZTop

When you need to maintain a frequently changing list of values that need to be sorted, using the SortedList dictionary can be a real time saver.

Dictionaries in C#: The ListDictionary

Hashtables (see my posts from the last two days ago) are a great, general use type of dictionary, but they have the one drawback of requiring some extra overhead to implement. For very small collections, say 10 items or less, the overhead can have an impact on performance. To solve this, Microsoft has created an alternate form of hashtable called a ListDictionary.

Behind the scenes, ListDictionaries are implemented as simple arrays. For small collections then their performance is very fast. They have the same interface as a hashtable, so it’s very easy to swap from one to another, aside of course from the issue of having to recompile your project.

Before starting, in addition to the using System.Collections reference, you will also need to include a using System.Collections.Specialized reference to the top of your code.

Next, all you have to do is create a variable of type ListDictionary. After that, using it is identical to using a HashTable.

      ListDictionary genders = new ListDictionary();

 

      genders.Add(“M”, “Male”);

      genders.Add(“F”, “Female”);

 

Frequently when dealing with collections the size of the collection is quite small. Lists of values for drop down boxes, which hold data for things like employee type, gender, ethnicity, and perhaps ranges of ages are all times when you will have a short list. For those times, when you are certain the list is small, use a ListDictionary to increase the performance of your application.