Home > Articles > Data > SQL Server

SQL Server Reference Guide

Hosted by

Toggle Open Guide Table of ContentsGuide Contents

Close Table of ContentsGuide Contents

Close Table of Contents

Data Management Objects: The Server Object

Last updated Mar 28, 2003.

In my last article, I introduced SQL-DMO, and how you can use VBScript to implement it. In this installment, I expand the small program I created to include more useful features. I also introduce more concepts related to the Server Object.

Let's take a look at the program as it stands now:

Set oServer = CreateObject("SQLDMO.SQLServer")
oServer.LoginSecure = True
oServer.Connect "(local)"
MsgBox oServer.Name
Set oServer = Nothing

This is a very simple program: it connects to a SQL Server and displays its name.

One axiom of programming is that your applications should have as much re-use as possible. That means you should think about what you need the program to do, and make it as extensible as possible early in the game.

In this light, one issue with the current code is that it is tied to a single server: (local). To be sure, you can always re-code the server name every time you use the program. However, a better way is to allow the user to enter a server's name when the program starts. To do that, we use a new VBScipt command, called InputBox.

First, let's look at the new code. Then I'll explain the new entries:

' dmo.vbs
' Created:   12/10/04 - Buck Woody
' Change Log:  12/11/04 - Buck Woody - Added 
'       comments, InputBox.

' Variable to hold Server Name
Dim ServerNameVar

' Ask for the name
ServerNameVar = InputBox("Enter Server Name:")

' Create the server object using SQL-DMO
Set oServer = CreateObject("SQLDMO.SQLServer")

' Login with current Windows account
oServer.LoginSecure = True
oServer.Connect(ServerNameVar)

' Display Server Name
MsgBox oServer.Name

' Clean up
Set oServer = Nothing

Whoa! Lots of new code here – but not really. Most of the extra verbiage involves the comments I raved about in my earlier articles on programming.

Since I'm keeping this code around, I have to follow my own advice and include comments to make the code more readable and supportable. Comments in VBScript (unlike T-SQL comments) start with a single tick-mark, like this: ' – which tells VBScript to ignore all the words on that line.

The next new touch is the addition of a variable to hold the name:

Dim ServerNameVar

The "Dim" part stands for "Dimension," which actually means to set apart some memory. In most programming languages, such as Visual Basic.Net, you would also need to assign a "type" to the variable – that is, set the kind of data that the variable can hold, such as "string" (a string of characters), "numeric" (general numbers), and so forth. VBScript doesn't need to be typed; in fact, it doesn't support typing. In any case, you still need to declare a variable like this to use it.

One way to request input from the user is with the InputBox function:

ServerNameVar = InputBox("Enter Server Name:")

With this line, I set the variable I created to the value returned by the InputBox() function. The InputBox() function is really just a call to another program, which creates a Windows message box with a text input area. I passed the text for the question to the function as well; in VBScript, unlike T-SQL, double-quotes enclose text.

Now that I have the name of the server, I can use it in place of the server name that was hard-coded earlier:

oServer.Connect(ServerNameVar)

In effect, this program does the same thing it did earlier, but now it's more extensible.

Let's add some more functionality by learning a little more about the Server object.

As I explained earlier, the SQL-DMO library contains various objects, such as the Server object that we've been using. Objects have properties, which are attributes that you can read and sometimes set. I've used one here already, the .Name property. We can begin to build a more useful program by reading a few more properties for display. Let's add more information to what the message box shows us.

Before we do, take a moment to think about the best way to do that. We could add more properties and formatting to the MsgBox function, but a more efficient way would be to create a variable to hold everything we want and then just use the variable for the text in the MsgBox function. That way, should the information need to change, only the variable has to change, not the code logic.

I'll implement that in the code, along with more properties. Here's the expanded variable area:

Dim ServerNameVar
Dim MsgBoxVar
Dim MsgTxtVar
...

Notice I've added two variables. The first (MsgBoxVar) holds the return value of the MsgBox() function, just as we did with the InputBox() function earlier. The other variable (MsgTxtVar) holds the object properties I'm after.

Here I fill the MsgTxtVar variable:

' Fill the variable with server properties
MsgTxtVar = "Name: " & oServer.Name & VbCRLf _
  & "ANSI Nulls: " & oServer.AnsiNulls & VbCRLf _
  & "Host: " & oServer.HostName & VbCRLf _ 
  & "Version: " & oServer.VersionMajor & "." _
  & oServer.VersionMinor & VbCRLf _ 
  & oServer.VersionString

I added some text (such as "Name: ") and the & symbol. The & symbol joins things together, such as text and variables as we have here. I also added a VBScript constant, called VbCRLf. This constant string is a signal to VBScript to add a carriage-return and line-feed. The _ symbol is used to continue a line, which I had to do in order to show the code properly on the screen. That isn't needed in normal coding, but it can help readability.

You can see that I asked whether the server is set to use ANSI NULLs (.AnsiNulls property), the host name of the server (.HostName property), the version number (.VersionMajor and .VersionMinor properties) and the full version string (.VersionString).

NOTE

Check the references at the end of this article to find even more properties to display. Some of them can be set as well as read, so exercise caution here.

To make this work, the MsgBox function has to take the form MsgBox(text, MsgBox type, title). The text variable is what we've seen before, and the MsgBox type sets the kind of message box I want. The default is a simple box with an OK button (mode 0), but I'll change that to an information box by using mode 64. Finally, I'll give it a title.

Cut-and-paste this code into notepad and run it:

' dmo.vbs
' Created:   12/10/04 - Buck Woody
' Change Log:  12/11/04 - Buck Woody - Added 
'       comments, InputBox.

' Variable to hold Server Name
Dim ServerNameVar
' Variables for the text boxes
Dim MsgBoxVar
Dim MsgTxtVar

' Ask for the name
ServerNameVar = InputBox("Enter Server Name:")
  If ServerNameVar = "" Then
    ServerName = "(local)"
  End If

' Create the server object using SQL-DMO
Set oServer = CreateObject("SQLDMO.SQLServer")
' Login with current Windows account
oServer.LoginSecure = True
oServer.Connect ServerNameVar

' Fill the variable with server properties
MsgTxtVar = "Name: " & oServer.Name & VbCRLf _
  & "ANSI Nulls: " & oServer.AnsiNulls & VbCRLf _
  & "Host: " & oServer.HostName & VbCRLf _ 
  & "Version: " & oServer.VersionMajor & "." _
  & oServer.VersionMinor & VbCRLf _ 
  & oServer.VersionString 

' Get the message box
MsgBoxVar = MsgBox(MsgTxtVar, 64, "SQL Server Info")

' Clean up
Set oServer = Nothing

You may have noticed one other addition. Just after the InputBox() function, I added the following lines:

  If ServerNameVar = "" Then
    ServerName = "(local)"
  End If

The "If" statement in VBScript tells the program what to do based on a condition. In this case, I got tired of typing "(local)", so the lines above state that if the ServerNameVar contains nothing (that is, if the user presses an ENTER on the first box) represented here as two quotes with nothing in between, then the value would be set to (local). This is called an "If-Then" block. I'll use these fairly often in our programming examples.

So far, the program only returns information about a server to a message box using various properties. In the next installment, I'll show you how to extend the program to read a few more properties and even perform an action on the server object using a method.

Online Resources

The full documentation for the Server Object Library can be found here.

InformIT Tutorials and Sample Chapters

Sharon Dooley discusses SQL-DMO in her book called SQL Server 7 Essential Reference that you can read right here on Safari.