追求艺术的脚步
Be the change you want to see in the world.Things are always as hard as you think but always as easy as you do.

一.什么是SQLDMO
       SQLDMO,也就是SQL Distributed Management Objects,即SQL分布式管理对象。SQLDMO封装了SQL SERVER 2000数据库中的所有对象。我以前也没看到过写SQLDMO的文章(学编程过程中学过的资料),在一个介绍SQLDMO的网站http://www.csharphelp.com/archives2/archive342.html上看到他说这个并没有被广泛地知道和使用。但SQLDMO提供了很强大的功能,能够使我们通过编程来对SQL SERVER几乎做任何SQL SERVER可以做的事。换句话说,使用SQLDMO的应用程序可以执行SQL SERVER企业管理器执行的所有功能。

二.如何使用SQLDMO
        SQLDMO对象来自SQLDMO.dll,而后者是和SQL SERVER 2000一起发布的(SQL SERVER 2005也是一样),所以SQLDMO对象本身就是一个COM对象。当你想在VS中使用它时,首先必须引用它:


        
      引用好后,你就可以很方便地使用SQLDMO了。我们一般可能比较多的会使用下面这几个对象:
     a.SQLDMO.Application 
     b.SQLDMO.SQLServer 
     c.SQLDMO.Database 
     d.SQLDMO.NameList

       接着介绍几个例子。
       首先是得到网络中的SQL服务器的列表:

//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>"

        接着是得到指定SQL服务器中的所有数据库:

//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的威力了。这么好的东西,你还不赶快试试,你能写出让别人感觉更专业的程序!

参考资料:
http://www.csharphelp.com/archives2/archive342.html
http://www.microsoft.com/china/community/Column/29.mspx
       
posted on 2006-10-17 10:10  小笨笨  阅读(2703)  评论(7编辑  收藏  举报