您可以考慮看看我這篇文章
http://www.wretch.cc/blog/s0341969/33079698
最近遇到個新案子,要如何查詢區網內有多少SQL SERVER存在呢?
網上查了一下,SQL剛裝好時有個SQLDMO.dll。這個dll本身是一個COM對象,而你必須把它引用到你的.net項目中。IDE將會為使用這個庫創建必需的COM包裝(wrapper)。注意:如果你在你的程序中使用「using SQLDMO」聲明,你會得到一個錯誤。
看網路上大部分的用法都是調用DLL後,透過DLL取得區網內的SQL SERVER NAME
----------------程式範例--START-------------------
SQLDMO.ApplicationClass SQLServer = new SQLDMO.ApplicationClass();
SQLDMO.NameList strServerList = SQLServer.ListAvailableSQLServers();
if (strServerList.Count > 0)
{
for (int i = 0; i < strServerList.Count; i++)
{
toolStripTextBox1.Items.Add(strServerList.Item(i + 1));
}
}
----------------程式範例--END-------------------
不過如果夠過上述寫法會出現如下的錯誤訊息..
此操作失敗的原因是對 IID 為「{10022406-E260-11CF-AE68-00AA004A34D5}」的接口的 COM 組件調用
QueryInterface 因以下錯誤而失敗: 不支持此接口 (異常來自 HRESULT:0x80004002
(E_NOINTERFACE))。」
出錯語句:
SQLDMO.NameList xx= (SQLDMO.NameList)sqlApp.ListAvailableSQLServers()
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
解決方法:
由於用 SQLDMO在有些機器上報錯,這樣只能找C#中的類實現,在Sql命名空間下有個 SqlDataSourceEnumerator類,它的Instance屬性返回一個表。這個表中有一列是SQL服務器的名。
以下方法返回一個數組把它們放到toolStripTextBox1就可以了。
Using System.Data.Sql;
SqlDataSourceEnumerator sqlServer = SqlDataSourceEnumerator.Instance;
DataTable db = sqlServer.GetDataSources();
string[] Name = new string[db.Rows.Count];
for (int i = 0; i < db.Rows.Count; i++)
{
Name[i] = db.Rows[i][0].ToString() + db.Rows[i][1].ToString().Trim();
toolStripTextBox1.Items.Add(Name[i]);
}