我们曾经在以前的应用中多次需要得到SQL Server的详细信息
过去
我们必须使用API和效率低下的ADO的 调用才能得到
现在
我们有了一个新的方法
就是SQLDMO(SQL Distributed Management Objects
SQL分布式管 理对象)
尽管它目前还不被人所知和使用
但是SQLDMO提供了许多强有力的
和利用代码从SQL Server获得 信息相类似的许多功能
为举例方便
这里仅向您解释如何得到本地网络的SQL Server列表
如何去连接每 个SQL Server
以及如何得到Server中的表
存储过程和视图的列表
SQLDMO对象来自SQLDMOdllSQLDMOdll是随SQL Server一起发布的SQLDMOdll自身是一个COM对象因此 在你的NET项目里必须先引用它VSNET集成开发环境会创建所有必要的对COM的封装注意如果你使用 using SQLDMO;语句来引用的话你将会得到一个错误信息要让它在你的应用程序里正常工作你必须按下图 去引用它
引用了COM对象之后你就可以很容易地使用它了
本例子中的所有操作都使用以下的一个或几个对象
SQLDMOApplication
SQLDMOSQLServer
SQLDMODatabase
SQLDMONameList
象数据备份和恢复这样的操作都有许多对象可以使用但作为例子我们会尽量简单使你轻松进 入SQLDMO的世界来浏览一下它的方便性
列出本地网络中可使用的SQL服务器相对来说比较简单首先你需要引用SQLDMOApplication对象其 次你必须建立一个SQLDMOApplicationListAvailableSQLServers()方法的返回值的实 例SQLDMONameListSQLDMONameList是服务器名字的COM集合
请记住在你习惯了调用COM对象之前调用COM对象总是令人感到可怕的但习惯了就会好的下面 是一些示例代码它利用本地可使用的SQL服务器的列表来填充下拉列表框
//得到所有本地网络中可使用的SQL服务器列表
SQLDMOApplication sqlApp = new SQLDMOApplicationClass();
SQLDMONameList sqlServers = sqlAppListAvailableSQLServers();
for(int i=;i<sqlServersCount;i++)
{
object srv = sqlServersItem(i + );
if(srv != null)
{
thiscboServersItemsAdd(srv);
}
}
if(thiscboServersItemsCount > )
thiscboServersSelectedIndex = ;
else
thiscboServersText = <No available SQL Servers>;
正如前面所讲的是不是很简单?请记住COM集合的第一个项目是而不是
连接数据库并得到所有数据库的列表也是相当简单的下面的代码采用上面下拉列表框所选择的SQL服 务器并连接该服务器(使用文本框输入的用户名和密码)生成该服务器上数据库列表的下拉列表框
//得到指定SQL服务器所有数据库的列表
SQLDMOApplication sqlApp = new SQLDMOApplicationClass();
SQLDMOSQLServer srv = new SQLDMOSQLServerClass();
srvConnect(thiscboServersSelectedItemToString()thistxtUserTextthistxtPasswordText);
foreach(SQLDMODatabase db in srvDatabases)
{
if(dbName!=null)
thiscboDatabaseItemsAdd(dbName);
}
要得到该库中对象的列表也是轻而易举的事再一次连接到数据库就可以遍历出对象的集合
//得到所有的存储过程所有的表放到Tables集合所以的视图放到Views集合
SQLDMOSQLServer srv = new SQLDMOSQLServerClass();
srvConnect(thiscboServersSelectedItemToString()thistxtUserTextthistxtPasswordText);
for(int i=;i<srvDatabasesCount;i++)
{
if(srvDatabasesItem(i+dbo)Name == thiscboDatabaseSelectedItemToString())
{
SQLDMO_Database db= srvDatabasesItem(i+dbo);
thislstObjectsItemsClear();
for(int j=;j<dbStoredProceduresCount;j++)
{
thislstObjectsItemsAdd(dbStoredProceduresItem(j+dbo)Name);
}
break;
}
}
程序运行的结果将象下图的样子