分析C#調用COM對象
C#調用COM對象
我們曾經在以前的應用中多次需要得到SQL Server的詳細信息,過去,我們必須使用API和效率低下的ADO的調用才能得到,現在,我們有了一個新的方法,就是SQLDMO(SQL Distributed Management Objects,SQL分布式管 理對象),盡管它目前還不被人所知和使用,但是SQLDMO提供了許多強有力的、和利用代碼從SQL Server獲得 信息相類似的許多功能,為舉例方便,這里僅向您解釋如何得到本地網絡的SQL Server列表,如何去連接每 個SQL Server,以及如何得到Server中的表、存儲過程和視圖的列表。
SQLDMO對象來自SQLDMO.dll,SQLDMO.dll是隨SQL Server2000一起發布的。SQLDMO.dll自身是一個COM對象,因此 ,在你的.NET項目里必須先引用它,VS.NET集成開發環境會創建所有必要的對COM的封裝。注意:如果你使用“ using SQLDMO;”語句來引用的話,你將會得到一個錯誤信息。
C#調用COM對象之后,你就可以很容易地使用它了。
本例子中的所有操作都使用以下的一個或幾個對象:
◆SQLDMO.Application
◆SQLDMO.SQLServer
◆SQLDMO.Database
◆SQLDMO.NameList
象數據備份和恢復這樣的操作都有許多對象可以使用,但作為例子,我們會盡量簡單,使你輕松進 入SQLDMO的世界來瀏覽一下它的方便性。
列出本地網絡中可使用的SQL服務器相對來說比較簡單,首先,你需要引用SQLDMO.Application對象,其次,你必須建立一個SQLDMO.Application.ListAvailableSQLServers()方法的返回值的實例SQLDMO.NameList,SQLDMO.NameList是服務器名字的COM集合。
請記住:在你習慣了C#調用COM對象之前,C#調用COM對象總是令人感到可怕的,但習慣了就會好的。下面 是一些示例代碼,它利用本地可使用的SQL服務器的列表來填充下拉列表框。
- SQLDMO.ApplicationsqlApp=newSQLDMO.ApplicationClass();
- SQLDMO.NameListsqlServers=sqlApp.ListAvailableSQLServers();
- for(inti=0;i<sqlServers.Count;i++)
- {
- objectsrv=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="<NoavailableSQLServers>";
- //得到指定SQL服務器所有數據庫的列表
- SQLDMO.ApplicationsqlApp=newSQLDMO.ApplicationClass();
- SQLDMO.SQLServersrv=newSQLDMO.SQLServerClass();
- srv.Connect(this.cboServers.SelectedItem.ToString(),
- this.txtUser.Text,this.txtPassword.Text);
- foreach(SQLDMO.Databasedbinsrv.Databases)
- {
- if(db.Name!=null)
- this.cboDatabase.Items.Add(db.Name);
- }
【編輯推薦】