熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

C#中使用SQL Server分布式管理對象

2013-11-13 10:08:41  來源: .NET編程 
  我們曾經在以前的應用中多次需要得到SQL Server的詳細信息過去我們必須使用API和效率低下的ADO的 調用才能得到現在我們有了一個新的方法就是SQLDMO(SQL Distributed Management ObjectsSQL分布式管 理對象)盡管它目前還不被人所知和使用但是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;
   }
   }
  程序運行的結果將象下圖的樣子
  
  

From:http://tw.wingwit.com/Article/program/net/201311/12696.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.