分析C#調(diào)用COM對(duì)象
C#調(diào)用COM對(duì)象
我們?cè)?jīng)在以前的應(yīng)用中多次需要得到SQL Server的詳細(xì)信息,過(guò)去,我們必須使用API和效率低下的ADO的調(diào)用才能得到,現(xiàn)在,我們有了一個(gè)新的方法,就是SQLDMO(SQL Distributed Management Objects,SQL分布式管 理對(duì)象),盡管它目前還不被人所知和使用,但是SQLDMO提供了許多強(qiáng)有力的、和利用代碼從SQL Server獲得 信息相類(lèi)似的許多功能,為舉例方便,這里僅向您解釋如何得到本地網(wǎng)絡(luò)的SQL Server列表,如何去連接每 個(gè)SQL Server,以及如何得到Server中的表、存儲(chǔ)過(guò)程和視圖的列表。
SQLDMO對(duì)象來(lái)自SQLDMO.dll,SQLDMO.dll是隨SQL Server2000一起發(fā)布的。SQLDMO.dll自身是一個(gè)COM對(duì)象,因此 ,在你的.NET項(xiàng)目里必須先引用它,VS.NET集成開(kāi)發(fā)環(huán)境會(huì)創(chuàng)建所有必要的對(duì)COM的封裝。注意:如果你使用“ using SQLDMO;”語(yǔ)句來(lái)引用的話(huà),你將會(huì)得到一個(gè)錯(cuò)誤信息。
C#調(diào)用COM對(duì)象之后,你就可以很容易地使用它了。
本例子中的所有操作都使用以下的一個(gè)或幾個(gè)對(duì)象:
◆SQLDMO.Application
◆SQLDMO.SQLServer
◆SQLDMO.Database
◆SQLDMO.NameList
象數(shù)據(jù)備份和恢復(fù)這樣的操作都有許多對(duì)象可以使用,但作為例子,我們會(huì)盡量簡(jiǎn)單,使你輕松進(jìn) 入SQLDMO的世界來(lái)瀏覽一下它的方便性。
列出本地網(wǎng)絡(luò)中可使用的SQL服務(wù)器相對(duì)來(lái)說(shuō)比較簡(jiǎn)單,首先,你需要引用SQLDMO.Application對(duì)象,其次,你必須建立一個(gè)SQLDMO.Application.ListAvailableSQLServers()方法的返回值的實(shí)例SQLDMO.NameList,SQLDMO.NameList是服務(wù)器名字的COM集合。
請(qǐng)記?。涸谀懔?xí)慣了C#調(diào)用COM對(duì)象之前,C#調(diào)用COM對(duì)象總是令人感到可怕的,但習(xí)慣了就會(huì)好的。下面 是一些示例代碼,它利用本地可使用的SQL服務(wù)器的列表來(lái)填充下拉列表框。
- 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服務(wù)器所有數(shù)據(jù)庫(kù)的列表
- 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);
- }
【編輯推薦】