利用SQLDMO操控SQL Server

        在开发基于SQL Server数据库的应用程序时,经常会遇到需要知道SQL Server数据库对象的相关信息的情况,例如SQL Server中有哪些数据库,这些数据库中有哪些数据表,每个数据表有哪些字段,这些字段是什么属性等。利用SQL-DMO(分布式管理对象)来访问SQL Server数据库。SQL-DMO是为Windows 9x与 Windows NT提供的32位OLE对象,它为与OLE兼容的应用程序提供了SQL Server管理功能的接口,开发者通过DMO就可以直接访问SQL Server所有的数据对象。
        不知道大家注意过没有,有好多代码生成器在操作数据库的时候就是利用SQLDMO对象来显示数据库的(包括数据库服务器、数据库、表、视图、存储过程)。但是我上次写的那个简单的代码生成器却没有利用这个对象,我是直接利用SQL语句来操作的,大家不妨在看看那个“ 代码生成器”。好了,废话少说,下面就介绍一下怎么利用SQLDMO操作数据的。

一、获取局域网数据库服务器
首先要定义一个SQLDMO.Application 对象
private SQLDMO.Application sqlApp = new SQLDMO.ApplicationClass();
然后再定义一个SQLDMO.NameList 对象
SQLDMO.NameList sqlServers=null;
cboServers是下列列表框的ID,下面是将数据库服务器显示在下拉列表框中的代码:
None.gif sqlServers  =  sqlApp.ListAvailableSQLServers();
None.gif
for ( int  i = 0 ;i < sqlServers.Count;i ++ )
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
object srv = sqlServers.Item( i + 1);
InBlock.gif    
if(srv != null)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
this.cboServers.Items.Add(srv);                        
ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

二、获取服务器中的数据库列表
None.gif SQLDMO.SQLServer srv  =   new  SQLDMO.SQLServerClass();            
None.gifsrv.Connect(
this .cboServers.SelectedItem.ToString(), this .txtUser.Text, this .txtPassword.Text);
None.gif
None.gif
foreach (SQLDMO.Database db  in  srv.Databases)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
if(db.Name!=null)
InBlock.gif        
this.cboDatabase.Items.Add(db.Name);
ExpandedBlockEnd.gif}

None.gif
this .cboDatabase.Sorted  =   true ;
None.gif
if ( this .cboDatabase.Items.Count  > 0 )
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
this.cboDatabase.SelectedIndex = 0;
InBlock.gif    
this.cboDatabase.Enabled = true;
InBlock.gif    
this.groupBox1.Enabled = true;
ExpandedBlockEnd.gif}

None.gif
else
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
this.groupBox1.Enabled = false;
InBlock.gif    
this.cboDatabase.Enabled = false;
InBlock.gif    
this.cboDatabase.Text = "<No databases found>";
ExpandedBlockEnd.gif}

三、获取数据库中的表
None.gif SQLDMO.SQLServer srv  =   new  SQLDMO.SQLServerClass();                
None.gifsrv.Connect(
this .cboServers.SelectedItem.ToString(), this .txtUser.Text, this .txtPassword.Text);
None.gif
for ( int  i = 0 ;i < srv.Databases.Count;i ++ )
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
if(srv.Databases.Item(i+1,"dbo").Name == this.cboDatabase.SelectedItem.ToString())
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        SQLDMO._Database db
= srv.Databases.Item(i+1,"dbo");
InBlock.gif        
this.lstObjects.Items.Clear();
InBlock.gif        
for(int j=0;j<db.Tables.Count;j++)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
this.lstObjects.Items.Add(db.Tables.Item(j+1,"dbo").Name);
ExpandedSubBlockEnd.gif        }

InBlock.gif        
this.Cursor = Cursors.Default;
InBlock.gif        
return;
ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}


四、获取数据库中的存储过程
None.gif SQLDMO.SQLServer srv  =   new  SQLDMO.SQLServerClass();                
None.gifsrv.Connect(
this .cboServers.SelectedItem.ToString(), this .txtUser.Text, this .txtPassword.Text);
None.gif
for ( int  i = 0 ;i < srv.Databases.Count;i ++ )
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
if(srv.Databases.Item(i+1,"dbo").Name == this.cboDatabase.SelectedItem.ToString())
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        SQLDMO._Database db
= srv.Databases.Item(i+1,"dbo");
InBlock.gif        
this.lstObjects.Items.Clear();
InBlock.gif        
InBlock.gif        
for(int j=0;j<db.StoredProcedures.Count;j++)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
this.lstObjects.Items.Add(db.StoredProcedures.Item(j+1,"dbo").Name);
ExpandedSubBlockEnd.gif        }

InBlock.gif        
this.Cursor = Cursors.Default;
InBlock.gif        
return;
ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

五、获取数据库中的视图
None.gif SQLDMO.SQLServer srv  =   new  SQLDMO.SQLServerClass();                
None.gifsrv.Connect(
this .cboServers.SelectedText, this .txtUser.Text, this .txtPassword.Text);
None.gif
for ( int  i = 0 ;i < srv.Databases.Count;i ++ )
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
if(srv.Databases.Item(i+1,"dbo").Name == this.cboDatabase.SelectedItem.ToString())
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        SQLDMO._Database db
= srv.Databases.Item(i+1,"dbo");
InBlock.gif        
this.lstObjects.Items.Clear();
InBlock.gif        
for(int j=0;j<db.Views.Count;j++)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
this.lstObjects.Items.Add(db.Views.Item(j+1,"dbo").Name);
ExpandedSubBlockEnd.gif        }

InBlock.gif        
this.Cursor = Cursors.Default;
InBlock.gif        
return;
ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}


        这些都是最基本的操作,有了这些大家还可以操作表中的字段、数据类型、字段长度等信息。利用这些信息和.NET框架中的CodeDOM大家就可以轻而易举实现自己的代码生成器了。怎么样,简单吧,哈哈!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值