2009-07-15 6 views
5

herkes hatalıydım aşağıdaki kod parçasında ne yapıyorum bana açıklayabilir: Bu bağlanamaz sr.Databases bir istisna verirC# içinde SMO kullanarak kullanılabilir SQL Server örnekleri nasıl listelenir?

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

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

.

+0

Neden SQL Sunucuları numaralandırma ve sonra yine sadece bir "TEST" birini başlatmak ?? –

+0

Güvenlik duvarı (veya başka bir şey), kullanılabilir örnekleri bulmaya çalışan osql yayınını engelliyor olabilir mi? –

cevap

8

onlar yararlı olabilir aşağıdaki bağlantılardan bir göz atın:

Alternatif Buna kodunuzu değiştirebilir:

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

Bu sorununuzu çözdüğünü umuyorum.

+0

Soru, örnek isimlerini bulması gerektiğini söylüyor. Fakat verdiği kod, belirli bir SQLServer örneğindeki veritabanlarını bulmaktır. –

6

Örnek adı Test olan bir SQL Server var mı? Eğer değilse, bu senin problemin.

Tüm yerel SQL Server örneklerini numaralandırmaya çalışıyorsunuz gibi görünüyor. Eğer öyleyse, bu kod çalışır:

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'ın cevap en uygun: Soru o özel durumun veritabanlarını bulmak isteyen yani yanlış başlıklı Her ihtimale karşı

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"]); 
} 
2

.

+0

Dönüş değeri kullanılmadığından SmoApplication.EnumAvailableSqlServers çağrısına gerek yoktur. – adrianbanks

+0

Yup. İşaret ettiğin için teşekkürler. –

0
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     
      } 
     } 
+1

sadece 32bit uygulaması 32bit uygulaması ve 64bit için aynıysa derlenmişse – Azerothian