sjpisaboy

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
By Kevin Goss
转自
http://www.csharphelp.com/archives2/archive342.html



很多时候,我需要在我的程序中得到SQL Server的详细信息。直到最近我还在使用API调用和假冒的ADO调用来获得我需要的信息。现在,我们有了SQLDMO(SQL Distributed Management Objects)。尽管没有被广泛的知晓和使用,SQLDMO提供了一个非常强大的功能集来用代码实现SQL Server所有能作的事。我举这个例子,是为了展示如何在你本地网络上取得SQL Server列表,如何连接一个Server,和如何从服务器得到表、存储过程和视图的列表。

SQLDMO对象来自与SQL Server 2000一同发售的SQLDMO.dll。这个dll本身是一个COM对象,而你必须把它引用到你的.net项目中。IDE将会为使用这个库创建必需的COM包装(wrapper)。注意:如果你在你的程序中使用“using SQLDMO”声明,你会得到一个错误。

(你必须为你的样例程序正常工作重引用这个COM对象)

在引用了这个COM对象之后,你可以开始非常简单的使用它。

所有在例子中出现的操作使用了一个或多个如下对象:

  • SQLDMO.Application
  • SQLDMO.SQLServer
  • SQLDMO.Database
  • SQLDMO.NameList

有很多可用的对象来完成诸如备份和还原的操作,但为了本文的目的,我打算保持简单使你能很容易的对SQLDMO入门。

列出你在网络的所有SQL Servers是非常容易的。首先,你需要引用SQLDMO.Application对象。然后你把一个SQLDMO.NameList的实例设为SQLDMO.Application.ListAvailableSQLServers()方法的返回值。SQLDMO.NameList是一个服务器名的COM集合。

记住,在你习惯之前,调用COM对象有点让人胆战心惊,但是它们之间的协定(convention)是非常相似的。这里有一段示例代码,它把本地网络上可用的SQL Servers列表填入一个叫cboServers的combo box中:

//get all available SQL Servers     
SQLDMO.Application sqlApp = new SQLDMO.ApplicationClass(); 
SQLDMO.NameList sqlServers 
= sqlApp.ListAvailableSQLServers(); 
for(int i=0;i<sqlServers.Count;i++

    
object srv = sqlServers.Item(i + 1); 
    
if(srv != null
    

        
this.cboServers.Items.Add(srv);                         
    }
 
}
 
if(this.cboServers.Items.Count > 0
    
this.cboServers.SelectedIndex = 0
else 
    
this.cboServers.Text = "<No available SQL Servers>";

就像你看到得那样,这是非常简单得。只要记住COM的集合从指针1开始,不是0。 

连接到一个服务器然后得到一个数据库的列表也同样非常简单。接下来的代码将用combo box中选中的SQL Server,连上它(用text box中的用户名和密码),然后,另一个combo box就灌入了那个服务器上的数据库列表。

//get all available databases from an SQL Server 
SQLDMO.Application sqlApp = new SQLDMO.ApplicationClass(); 
SQLDMO.SQLServer srv 
= new SQLDMO.SQLServerClass();                 
srv.Connect(
this.cboServers.SelectedItem.ToString(),this.txtUser.Text,this.txtPassword.Text); 
foreach(SQLDMO.Database db in srv.Databases) 

    
if(db.Name!=null
        
this.cboDatabase.Items.Add(db.Name); 
}

使用这个库得到类型对象列表也同样是轻而易举的事。你再一次建立一个数据库连接,然后你循环通过这个对象集合。

//Get all Stored procedures - tables are in the Tables collection, views are in the Views collection 
SQLDMO.SQLServer srv = new SQLDMO.SQLServerClass();                 
srv.Connect(
this.cboServers.SelectedItem.ToString(),this.txtUser.Text,this.txtPassword.Text); 
for(int i=0;i<srv.Databases.Count;i++

    
if(srv.Databases.Item(i+1,"dbo").Name == this.cboDatabase.SelectedItem.ToString()) 
    

        SQLDMO._Database db
= srv.Databases.Item(i+1,"dbo"); 
        
this.lstObjects.Items.Clear(); 
        
for(int j=0;j<db.StoredProcedures.Count;j++
        

            
this.lstObjects.Items.Add(db.StoredProcedures.Item(j+1,"dbo").Name); 
        }
 
        
break
    }
 
}


好了伙计,这就是我的SQLDMO入门指南。请立即下载样例代码和程序来看。就像你看到的,当你需要SQL信息和控制时,这是一种更方便的选择。编程愉快!
posted on 2006-04-06 15:38  Brendan  阅读(3327)  评论(0编辑  收藏  举报