आप उन सर्वरों को छोड़ रहे हैं जिनका नाम इंस्टेंस नहीं है। अपना कोड संशोधित करें:
public class SqlServerInstance
{
public string ServerInstance { get; set; }
public string Version { get; set; }
}
public static List<SqlServerInstance> LocateSqlInstances()
{
List<SqlServerInstance> results = new List<SqlServerInstance>();
using (DataTable sqlSources = SqlDataSourceEnumerator.Instance.GetDataSources())
{
foreach (DataRow source in sqlSources.Rows)
{
string servername;
string instancename = source["InstanceName"].ToString();
if (!string.IsNullOrEmpty(instancename))
{
servername = source["ServerName"].ToString() + '\\' + instancename;
}
else
{
servername = source["ServerName"].ToString();
}
results.Add(new SqlServerInstance (){ ServerInstance = servername, Version = source["Version"].ToString() });
}
}
return results;
}
कृपया ध्यान दें:SqlDataSourceEnumerator.Instance.GetDataSources()
कमियां हैं:
- फ़ायरवॉल नियमों के अधीन (अवरुद्ध TCP/IP 1433 और UDP 1434)
- यदि SQL ब्राउज़र बंद है तो SQL सर्वर नहीं ढूँढता
- यदि SQL सर्वर छिपे हुए हैं तो उन्हें नहीं मिलता
- सूची सामग्री दोहराने योग्य होने की गारंटी नहीं है (समय समाप्त होने के कारण)। वास्तव में, बाद की कॉल से नेटवर्क I/O, सर्वर प्रदर्शन, नेटवर्क पर सर्वरों की संख्या और अन्य समय-निर्भर बाधाओं के आधार पर एक अलग सूची देने की काफी संभावना है
कई स्रोतों का कहना है कि आपको SqlDataSourceEnumerator.Instance.GetDataSources()
पर 2 कॉल करने होंगे। ...
संदर्भ:
- SqlDataSourceEnumerator.Instance; सभी उदाहरण नहीं लौटा रहे हैं
- EnumAvailableSqlServers या SqlDataSourceEnumerator - उपलब्ध डेटाबेस की गलत सूची
- एसक्यूएल सर्वर की गणना करना
- प्रोग्रामेटिक रूप से SQL सर्वरों को सूचीबद्ध करना