2016-11-11 5 views
0

может быть несколько экземпляров сервера sql на машине. Я пытаюсь идентифицировать каждый экземпляр сервера sql-сервера, работающий на любой заданной машине REMOTE. все остальные ответы в других вопросах ТОЛЬКО адресуют локальную машину.Как вы указываете имена экземпляров для SQL Server, когда у вас есть имя сервера?

Я видел SqlDataSourceEnumerator и он ищет сеть, я знаю компьютер, который я хочу найти.

Я видел SmoApplication.EnumAvailableSqlServers, но это требует «имени экземпляра», который является то, что я ищу

Как вы опрашивать машину для SQL Server информации экземпляра с .net?

+0

Возможный дубликат [Найти все экземпляры SQL сервера программно] (HTTP: // StackOverflow .com/questions/13363215/find-all-instance-of-sql-server-programatically) – ps2goat

+0

вы должны иметь возможность использовать ответ на этот вопрос для перечисления экземпляров на определенной машине. это помогает? – ps2goat

+0

Я вижу ответ, и негде определить, какой компьютер вы хотите допросить, это только для локальной машины –

ответ

1

Этот блог показывает, как список экземпляров SQL-сервера, установленные на компьютере using System.ServiceProcess;

https://blogs.msdn.microsoft.com/sqlserverfaq/2009/03/07/how-to-detect-sql-server-instances-features-installed-on-a-machine/

недостающий ключ для меня было то, что ServiceController.GetService() статический метод имеет перегрузку, которая принимает строку «имясервера»

class InstanceInfoRetriever 
    { 
     public IEnumerable<string> GetInstanceNames(string serverName) 
     { 
      var servicenames = new[] { "MSSQL", "SQL Server" }; 
      var services = ServiceController.GetServices(serverName); 
      var sqlservices = services.Where(s => servicenames.Any(n => s.ServiceName.Contains(n))); 
      return sqlservices.Select(s => s.ServiceName); 

     } 
    } 
0

Попробуйте следующее

Dim dt as dataTable= SqlDataSourceEnumerator.Instance.GetDataSources() 

For each dr as datarow in dt.Select("[ServerName] = '" & strServername & "'") 

Msgbox(string.Concat(dr("ServerName"), "\\", dr("InstanceName")))) 

NEXT 

Где strServername это имя машины

Или попробуйте использовать Linq

Dim lst as List(of string) = SqlDataSourceEnumerator.Instance.GetDataSources().where(Function(x) x.servername = strServername).Select(Function(y) y.Servername & "\" & y.Instancename).ToList() 
+0

, не может этого сделать, слишком ресурсоемкого, а не полного доказательства, у нас есть БОЛЬШАЯ сеть. –

+0

Отредактировал свой ответ. Попробуйте использовать Linq – Hadi

 Смежные вопросы

  • Нет связанных вопросов^_^