Обнаружить SQL Server 2008 R2 - PullRequest
       19

Обнаружить SQL Server 2008 R2

1 голос
/ 25 августа 2011

Я погуглил день, но вопрос все еще остается: как обнаружить SQL Server 2008 R2 в различных версиях Windows:

  • через реестр (было бы нашим любимымрешение),
  • через файловую систему ,
  • через установщик код выхода ?

Установщик разработан с помощью NSIS.Некоторые дополнительные сведения:

Реестр

Образцы в сети устарели или просто неверны.Не только R2, но и обнаружение 2k8 также проблематично.

Файловая система

Я понятия не имею, какие файлы особенно из 2k8 R2.

Код выхода установщика

В некоторых случаях завершается без кода ошибки (т. Е. Отсутствуют предварительные условия).

Ответы [ 7 ]

2 голосов
/ 25 августа 2011

Посмотрите на более старый SQLPing исходный код, который имеет множество методов

2 голосов
/ 25 августа 2011

вы можете использовать WMI для перечисления всех установленных продуктов Microsoft, а затем вы можете посмотреть, какой вам нужен

public static class MyClass
    {
        public static void Main()
        {
            ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT * FROM Win32_Product");
            foreach (ManagementObject mo in mos.Get())
            {
                Console.WriteLine(mo["Name"]);
            }


        }
    }
2 голосов
/ 25 августа 2011

попробуйте выполнить этот запрос:

SELECT @@Version

Я получаю этот результат обратно:

Microsoft SQL Server 2008 R2 (окончательная первоначальная версия) - 10.50.1600.1 (X64) 2 апреля 2010 г. 15:48:46 Авторское право (c) Microsoft Corporation Enterprise Edition (64-разрядная версия) в Windows NT 5.2 (сборка 3790: пакет обновления 2)

этого достаточно? Для меня да :)

1 голос
/ 25 августа 2011

Я использую ниже код в моем приложении

 SqlDataSourceEnumerator sqldatasourceenumerator1 = SqlDataSourceEnumerator.Instance;
            DataTable datatable1 = sqldatasourceenumerator1.GetDataSources();
            foreach (DataRow row in datatable1.Rows)
            {
                if (Environment.MachineName.Equals(row["ServerName"]))
                {

                    isSqlServerPresent = true;
                    break;
                }
            }

Единственная проблема заключается в том, что этот код работает, когда машина находится в сети, но, поскольку в моем случае машина будет в сети, так что я был в порядке с этой проблемой.

Получает локальный экземпляр SQL Server.

1 голос
/ 25 августа 2011

И прежде чем пытаться выполнить запрос, предоставленный Davide (SELECT @@ Version), вы можете проверить, что служба MSSQL работает

using System.ServiceProcess;
var list = ServiceController.GetServices().ToList();
        if (list.Any(sc => sc.ServiceName.ToLower().Contains("mssql")))
0 голосов
/ 25 августа 2011

На самом деле, если вы хотите перечислить серверы в сети и экземпляры SQL-серверов на компьютере или в локальной сети, для этого есть API.

Должен быть правильный способ вызова NetServerEnum Windows API, примеры см .:

http://www.xtremevbtalk.com/showthread.php?t=107256

http://pinvoke.net/default.aspx/netapi32/netserverenum.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...