我們曾經在以前的應用中多次需要得到SQL Server的詳細信息
過去
我們必須使用API和效率低下的ADO的 調用才能得到
現在
我們有了一個新的方法
就是SQLDMO(SQL Distributed Management Objects
SQL分布式管 理對象)
盡管它目前還不被人所知和使用
但是SQLDMO提供了許多強有力的
和利用代碼從SQL Server獲得 信息相類似的許多功能
為舉例方便
這裡僅向您解釋如何得到本地網絡的SQL Server列表
如何去連接每 個SQL Server
以及如何得到Server中的表
存儲過程和視圖的列表
SQLDMO對象來自SQLDMO
dll
SQLDMO
dll是隨SQL Server
一起發布的
SQLDMO
dll自身是一個COM對象
因此
在你的
NET項目裡必須先引用它
VS
NET集成開發環境會創建所有必要的對COM的封裝
注意
如果你使用
using SQLDMO;
語句來引用的話
你將會得到一個錯誤信息
要讓它在你的應用程序裡正常工作
你必須按下圖 去引用它
引用了COM對象之後
你就可以很容易地使用它了
本例子中的所有操作都使用以下的一個或幾個對象
SQLDMO
Application
SQLDMO
SQLServer
SQLDMO
Database
SQLDMO
NameList
象數據備份和恢復這樣的操作都有許多對象可以使用
但作為例子
我們會盡量簡單
使你輕松進 入SQLDMO的世界來浏覽一下它的方便性
列出本地網絡中可使用的SQL服務器相對來說比較簡單
首先
你需要引用SQLDMO
Application對象
其 次
你必須建立一個SQLDMO
Application
ListAvailableSQLServers()方法的返回值的實 例SQLDMO
NameList
SQLDMO
NameList是服務器名字的COM集合
請記住
在你習慣了調用COM對象之前
調用COM對象總是令人感到可怕的
但習慣了就會好的
下面 是一些示例代碼
它利用本地可使用的SQL服務器的列表來填充下拉列表框
//得到所有本地網絡中可使用的SQL服務器列表
SQLDMO
Application sqlApp = new SQLDMO
ApplicationClass();
SQLDMO
NameList sqlServers = sqlApp
ListAvailableSQLServers();
for(int i=
;i<sqlServers
Count;i++)
{
object srv = sqlServers
Item(i +
);
if(srv != null)
{
this
cboServers
Items
Add(srv);
}
}
if(this
cboServers
Items
Count >
)
this
cboServers
SelectedIndex =
;
else
this
cboServers
Text =
<No available SQL Servers>
;
正如前面所講的
是不是很簡單?請記住
COM集合的第一個項目是
而不是
連接數據庫並得到所有數據庫的列表也是相當簡單的
下面的代碼采用上面下拉列表框所選擇的SQL服 務器
並連接該服務器(使用文本框輸入的用戶名和密碼)
生成該服務器上數據庫列表的下拉列表框
//得到指定SQL服務器所有數據庫的列表
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);
}
要得到該庫中對象的列表也是輕而易舉的事
再一次連接到數據庫
就可以遍歷出對象的集合
//得到所有的存儲過程
所有的表放到Tables集合
所以的視圖放到Views集合
SQLDMO
SQLServer srv = new SQLDMO
SQLServerClass();
srv
Connect(this
cboServers
SelectedItem
ToString()
this
txtUser
Text
this
txtPassword
Text);
for(int i=
;i<srv
Databases
Count;i++)
{
if(srv
Databases
Item(i+
dbo
)
Name == this
cboDatabase
SelectedItem
ToString())
{
SQLDMO
_Database db= srv
Databases
Item(i+
dbo
);
this
lstObjects
Items
Clear();
for(int j=
;j<db
StoredProcedures
Count;j++)
{
this
lstObjects
Items
Add(db
StoredProcedures
Item(j+
dbo
)
Name);
}
break;
}
}
程序運行的結果將象下圖的樣子
From:http://tw.wingwit.com/Article/program/net/201311/12696.html