Share via

List SQL Server Instances

Michael Mastro II 56 Reputation points
2022-08-18T19:33:09.817+00:00

Good afternoon,

I have a windows form that I am working with. When I first wrote this code it worked and was able to pull a list of SQL Servers for a ComboBox, and then as I changed servers it would populate another ComboBox with databases. I had not updated the code in a few years, and it is using .net 4.6.1 and the Microsoft.SqlServer.SqlManagementObjects version: 150.18147.0. I went to use the program and launched it now it is not returning any sql servers. I opened up visual studio and went to debug it and it is still not returning servers.
All this code is contained within the form class itself.

private async void ActiveStatuses_LoadAsync(object sender, EventArgs e)  
        {  
            //List all the servers, if only want to see local set to true  
            DataTable dataTable = await System.Threading.Tasks.Task.Run(() => { return SmoApplication.EnumAvailableSqlServers(false); });  
            cbServers.ValueMember = "Name";  
            cbServers.DataSource = dataTable;  
        }  
private void cbServers_SelectedIndexChanged(object sender, EventArgs e)  
        {  
            cbDatabases.Items.Clear();  
            if (cbServers.SelectedIndex != -1)  
            {  
                string serverName = cbServers.SelectedValue.ToString();  
                Server server = new Server(serverName);  
                try  
                {  
                    foreach (Database database in server.Databases)  
                    {  
                        cbDatabases.Items.Add(database.Name);  
                    }  
                }  
                catch (Exception ex)  
                {  
  
                    string excepection = ex.Message;  
                }  
            }  
        }  
  
        private void cbDatabases_SelectedIndexChanged(object sender, EventArgs e)  
        {  
            string databaseName = cbDatabases.SelectedItem.ToString();  
        }  

I cannot see why this would stop working and debugging shows enumeration yielded no results. Also it does output any errors.

Developer technologies | Windows Forms
Developer technologies | C#
Developer technologies | C#

An object-oriented and type-safe programming language that has its roots in the C family of languages and includes support for component-oriented programming.

{count} votes

4 answers

Sort by: Most helpful
  1. Olaf Helper 47,616 Reputation points
    2022-08-23T11:57:44.94+00:00

    See https://learn.microsoft.com/en-us/dotnet/framework/data/adonet/sql/enumerating-instances-of-sql-server
    => Enumeration Limitations
    The method wasn't ever reliable and can return incomplete results.

    0 comments No comments

  2. Karen Payne MVP 35,601 Reputation points Volunteer Moderator
    2022-08-23T01:44:18.937+00:00

    I had the same problem on a work machine but not my home computer.

    Steps to fix

    1. Administrative Tools
    2. Services
    3. Properties
    4. General tab
    5. Change Startup to auto
    6. Start the service

    I work on an area which is ungodly secure (IRS restrictions) so even with the above out of around 20 network servers all I can see is my local machine


  3. Rijwan Ansari 766 Reputation points MVP
    2022-08-19T13:00:32.85+00:00

    Hi

    Can you try the below code?

    //// Retrieve the enumerator instance, and then retrieve the data sources.  
            SqlDataSourceEnumerator instance = SqlDataSourceEnumerator.Instance;  
            DataTable dtDatabaseSources = instance.GetDataSources();  
    

    https://stackoverflow.com/questions/10781334/how-to-get-list-of-available-sql-servers-using-c-sharp-code


  4. Bruce (SqlWork.com) 83,581 Reputation points Volunteer Moderator
    2022-08-18T20:06:42.967+00:00

    Most likely your network no longer has the SQLBrowser service setup. Security usually shuts this down.


Your answer

Answers can be marked as 'Accepted' by the question author and 'Recommended' by moderators, which helps users know the answer solved the author's problem.