首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

C# 列舉局域網 SQL Server 實例:基於 SQLDMO 的 COM 互操作方案

     編輯:MySQL 資料庫相關知識

SQLDMO 枚舉可用 SQL Server 完整實現

利用 SQL Server 自帶的 SQLDMO.dll COM 組件,通過 .NET 互操作實現局域網 SQL Server 實例發現。

環境準備

  1. 引用類型:**COM 引用**(非 .NET 程序集)
  2. 組件名稱:Microsoft SQLDMO Object Library
  3. 典型路徑:C:\Program Files\Microsoft SQL Server\80\Tools\Binn\sqldmo.dll

核心代碼實現

using System;
using System.Collections.Generic;
using System.Text;
using SQLDMO;  // 需添加 COM 引用後自動生成互操作程序集

namespace AllSqlServer
{
    class Program
    {
        static void Main(string[] args)
        {
            // 1. 創建 ApplicationClass 實例
            ApplicationClass ac = new ApplicationClass();
            
            // 2. 獲取可用服務器名稱列表
            NameList names = ac.ListAvailableSQLServers();
            
            // 3. 複製到字符串數組
            string[] serverList = new string[names.Count];
            for (int i = 0; i < serverList.Length; i++)
            {
                serverList[i] = names.Item(i + 1); // SQLDMO 集合通常 1-based
            }
            
            // 4. 輸出結果
            foreach (string server in serverList)
            {
                Console.WriteLine(server);
            }
            
            Console.ReadLine();
        }
    }
}

關鍵技術點解析

要點說明
COM 互操作.NET Runtime Callable Wrapper (RCW) 自動封裝 COM 接口
ListAvailableSQLServers廣播網絡探測,返回 NameList 集合
索引基數SQLDMO 集合為 1-based,Item(1) 為第一項
網絡依賴需開啟 SQL Server Browser 服務,UDP 1434 端口通暢
權限調用進程需有網絡枚舉權限,防火牆可能阻攔廣播

現代化替代方案

⚠️ 注意:SQLDMO 已在 SQL Server 2012+ 棄用,移除於 2016+。新項目推薦:

  • SMO (SQL Server Management Objects):Microsoft.SqlServer.Management.Smo.SmoApplication.EnumAvailableSqlServers(),純 .NET 組件,無 COM 依賴
  • SqlDataSourceEnumerator:System.Data.Sql.SqlDataSourceEnumerator.Instance.GetDataSources(),標準 ADO.NET,零額外依賴

SqlDataSourceEnumerator 示例

using System.Data.Sql;

DataTable servers = SqlDataSourceEnumerator.Instance.GetDataSources();
foreach (DataRow row in servers.Rows)
{
    Console.WriteLine($"{row["ServerName"]}\\{row["InstanceName"]} - {row["Version"]}");
}

適用場景對比

方案適用版本依賴推薦度
SQLDMOSQL Server 2000/2005/2008/R2COM 組件⭐ 僅維護舊系統
SMOSQL Server 2005+.NET 組件⭐⭐⭐ 功能最全
SqlDataSourceEnumeratorSQL Server 2000+System.Data⭐⭐⭐⭐⭐ 輕量標準
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved