参照网上例子,使作SQLDMO获取服务器列表 SQLDMO.Application sqlApp = new SQLDMO.ApplicationClass();
这句出错。
Error 1 The type 'SQLDMO.ApplicationClass' has no constructors defined
Error 2 Interop type 'SQLDMO.ApplicationClass' cannot be embedded. Use the applicable interface instead.是什么原因。还有其他方法获取吗?并能判断某个数据库是否存在这个服务器中

解决方案 »

  1.   

    SqlDataSourceEnumerator..::.GetDataSources() 方法可以实现这个功能.
    此方法返回一个名为SqlDataSources的DataTable实例.其中包含4个字段:
    ServerName  服务器名称
    InstanceName  服务器实例名称
    IsClustered  服务器是否是群集的一部分
    Version 版本 /// <summary>        /// 检索LAN内所有可见 SQL Server 2000 或 SQL Server 2005 实例的信息.        /// </summary>        /// <returns>服务器名称列表.</returns>        public static IList<string> GetLANSqlServerNames()        {            var se = System.Data.Sql.SqlDataSourceEnumerator.Instance;            DataTable servers = null;            try { servers = se.GetDataSources(); }catch { }            int count;            if ((null == servers) || (0 == (count = servers.Rows.Count)))                return new List<string>();            string name;            string instance;            List<string> list = new List<string>(count);            for (int i = 0; i < servers.Rows.Count; i++)            {                name = servers.Rows[i]["ServerName"] as string;                instance = servers.Rows[i]["InstanceName"] as string;                if (string.IsNullOrEmpty(instance) || ("MSSQLSERVER" == instance))                    list.Add(name);                else                    list.Add(name + "\\" + instance);            }            servers.Dispose();            return list;        }
      

  2.   

    按楼上的方法怎么获取的实例名怎么是空的呢?
    Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (Intel X86)   Mar 29 2009 10:27:29   Copyright (c) 1988-2008 Microsoft Corporation  Enterprise Edition on Windows NT 6.1 <X86> (Build 7600: ) 
      

  3.   

    取得数据库服务器列表: 
    public ArrayList GetServerList() 

    ArrayList alServers = new ArrayList() ; 
    SQLDMO.Application sqlApp = new SQLDMO.ApplicationClass() ; 
    try 

    SQLDMO.NameList serverList = sqlApp.ListAvailableSQLServers() ; 
    for(int i = 1;i<= serverList.Count;i++) 

    alServers.Add(serverList.Item(i)) ; 


    catch(Exception e) 

    throw(new Exception("取数据库服务器列表出错:"+e.Message)) ; 

    finally 

    sqlApp.Quit() ; 

    return alServers ; 
    } 或
    SqlDataSourceEnumerator instance = SqlDataSourceEnumerator.Instance; 
    DataTable dt = instance.GetDataSources().DefaultView.ToTable(true,"ServerName"); 
    comboBox1.DisplayMember = "ServerName"; 
    comboBox1.DataSource = dt;
      

  4.   

    再来个简单的,刚测试通过:using System;
    using System.Data.Sql;
    using System.Text;namespace AllSqlServer
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine("正在遍历局域网数据库实例,请稍后.....");
                SqlDataSourceEnumerator instance = SqlDataSourceEnumerator.Instance;
                System.Data.DataTable table = instance.GetDataSources();            DisplayData(table);
                Console.WriteLine("遍历结束");
                Console.ReadLine();
            }        private static void DisplayData(System.Data.DataTable table)
            {
                foreach (System.Data.DataRow row in table.Rows)
                {
                    Console.WriteLine("服务器名 = {0}", row["ServerName"]);
                    Console.WriteLine("实例名 = {0}", row["InstanceName"]);
                    Console.WriteLine("是否是群集服务器 = {0}", row["IsClustered"]);//指示服务器是否是群集的一部分
                    Console.WriteLine("版本 = {0}", row["Version"]);//8.*是SQL 2000,9.*是SQL 2005
                    Console.WriteLine("============================");            }
            }
        }
    }