views:

1503

answers:

6

Hi

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

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

foreach(DataBase db in sr.DataBases)
{
    Console.WriteLine(db["name"]);
}

It gives an exception in sr.Databases that can not be connected.

+1  A: 

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

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.

Lucas McCoy
The question says that he/she needs to find the instance names. But the code he/she gave is for finding the databases in a particular SQLServer instance.
Ganesh R.
A: 

Could be that your firewall (or something else) blocks osql's broadcast which tries to find available instances?

Dmitri Nesteruk
+1  A: 

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"]);
}
adrianbanks
+1  A: 

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.

Ganesh R.
You don't need the call to SmoApplication.EnumAvailableSqlServers as the return value is not used.
adrianbanks
Yup. Thanks for pointing it out.
Ganesh R.
A: 

Hi buddy im facing a problm in accessing sql server instances

DataTable dt = SmoApplication.EnumAvailableSqlServers(false);

this is the code i m using but the problm is it is not geting server name in ma pc but the same project on another works perfect without any change

abbikhan
A: 

no man i checked this with turn off settings it is not working

abbikhan