How to list available instances of SQL Servers using SMO in C#?

前端 未结 4 549
小鲜肉
小鲜肉 2020-11-30 15:12

Can anybody explain me what I wrong I am doing in the following piece of code:

DataTable dt=SmoApplication.EnumAvailableSqlServer(true);
Server sr = new Serv         


        
相关标签:
4条回答
  • 2020-11-30 15:47

    Just in case the question is titled wrong i.e. he wants to find the databases in the particular instance:

    using System;
    using Microsoft.SqlServer.Management.Smo;
    using System.Data;
    using System.Windows.Forms;
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main()
            {
                Server sr = new Server("MACHINE_NAME\\INSTANCE_NAME");
    
                try
                {
                    foreach (Database db in sr.Databases)
                    {
                        Console.WriteLine(db.Name);
                    }
                    Console.Read();
                }
                catch (Exception Ex)
                {
                    MessageBox.Show(Ex.ToString());
                }
            }
        }
    }
    

    Else Lucas Aardvark answer is most appropriate.

    0 讨论(0)
  • 2020-11-30 15:48

    Take a look at the following links they may be helpful:

    • Enumerate SQL Server Instances in C#, Using ODBC
    • How to get a list of available SQL Servers using C# (MSDN)
    • Populating a list of SQL Servers

    Alternatively you could change your code to this:

    DataTable dt = SmoApplication.EnumAvailableSqlServers(false);
    if (dt.Rows.Count > 0)
    {
        foreach (DataRow dr in dt.Rows)
        {
            Console.WriteLine(dr["Name"]);
        }
    }
    

    Hope this solves your problem.

    0 讨论(0)
  • 2020-11-30 15:50
    using Microsoft.Win32;
    
           RegistryKey rk = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Microsoft SQL Server");
            String[] instances = (String[])rk.GetValue("InstalledInstances");
            if (instances.Length > 0)
            {
                foreach (String element in instances)
                {
                   Console.WriteLine(element);    // element is your server name                
                }
            }
    
    0 讨论(0)
  • 2020-11-30 15:56

    Do you have a SQL Server with the instance name Test? If not, that is your problem.

    It looks like you are trying to enumerate all of the local SQL Server instances. If so, this code will work:

    DataTable dt = SmoApplication.EnumAvailableSqlServers(true);
    
    foreach (DataRow dr in dt.Rows)
    {
        Console.WriteLine(dr["Name"]);
        Console.WriteLine("   " + dr["Server"]);
        Console.WriteLine("   " + dr["Instance"]);
        Console.WriteLine("   " + dr["Version"]);
        Console.WriteLine("   " + dr["IsLocal"]);
    }
    
    0 讨论(0)
提交回复
热议问题