2009-07-15 8 views
5

किसी को भी मुझे बता सकते हैं कि मैं क्या गलत मैं कोड का निम्न भाग में कर रहा हूँ:सी # में एसएमओ का उपयोग कर एसक्यूएल सर्वर के उपलब्ध उदाहरणों को कैसे सूचीबद्ध करें?

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

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

यह sr.Databases में एक अपवाद नहीं जोड़ा जा सकता है कि देता है।

+0

आप SQL सर्वर का आकलन क्यों कर रहे हैं, और फिर भी केवल एक "परीक्षण" को तुरंत चालू कर रहे हैं ?? –

+0

यह हो सकता है कि आपका फ़ायरवॉल (या कुछ और) ओएसक्ल के प्रसारण को अवरुद्ध करता है जो उपलब्ध उदाहरण ढूंढने का प्रयास करता है? –

उत्तर

8

निम्न लिंक पर एक नजर डालें वे सहायक हो सकता है:

वैकल्पिक रूप से आप इस के लिए अपने कोड को बदल सकता है:

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

आशा है कि यह आपकी समस्या हल करे।

+0

सवाल यह कहता है कि उसे इंस्टेंस नाम ढूंढना होगा। लेकिन वह कोड जो उसने दिया है वह किसी विशेष SQLServer उदाहरण में डेटाबेस ढूंढने के लिए है। –

6

क्या आपके पास उदाहरण नाम परीक्षण के साथ एक SQL सर्वर है? यदि नहीं, तो यह आपकी समस्या है।

ऐसा लगता है कि आप सभी स्थानीय SQL सर्वर उदाहरणों को गिनाने की कोशिश कर रहे हैं। यदि हां, तो इस कोड काम करेगा:

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

शायद ज़रुरत पड़े प्रश्न गलत शीर्षक है अर्थात वह विशेष उदाहरण में डेटाबेस को खोजने के लिए करना चाहता है:

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()); 
      } 
     } 
    } 
} 

वरना लुकास एर्डवार्क जवाब सबसे उपयुक्त है।

+0

आपको SmoApplication.EnumAvailableSqlServers को कॉल की आवश्यकता नहीं है क्योंकि वापसी मान का उपयोग नहीं किया जाता है। – adrianbanks

+0

यूप। इस पर ध्यान दिलाने के लिए धन्यवाद। –

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

यह 32 बिट ऐप के रूप में संकलित होने पर 64 बिट सर्वर लौटाएगा और 64 बिट के लिए समान होगा – Azerothian

संबंधित मुद्दे