что настройки реестра должны включить TCP на SQL Server 2005 и 2008?

Я хочу программно включить соединения TCP на SQL Server. Я полагаю, что мы можем достигнуть этого путем изменения ключей реестра и перезапуска сервиса SQL Server. Какой реестр я должен отредактировать?

5
задан VoidDweller 3 April 2010 в 03:44
поделиться

2 ответа

Если у вас нет веских причин для изменения реестра напрямую, я предлагаю вам рассмотреть возможность использования WMI . WMI предоставит вам более независимую от версии реализацию. Доступ к WMI можно получить через пространство имен System.Management . У вас может быть код, который выглядит примерно так.

public void EnableSqlServerTcp(string serverName, string instanceName)
{
    ManagementScope scope =
            new ManagementScope(@"\\" + serverName +
                                @"\root\Microsoft\SqlServer\ComputerManagement");
    ManagementClass sqlService =
            new ManagementClass(scope,
                                new ManagementPath("SqlService"), null);
    ManagementClass serverProtocol =
            new ManagementClass(scope,
                                new ManagementPath("ServerNetworkProtocol"), null);

    sqlService.Get();
    serverProtocol.Get();

    foreach (ManagementObject prot in serverProtocol.GetInstances())
    {
        prot.Get();
        if ((string)prot.GetPropertyValue("ProtocolName") == "Tcp" &&
            (string)prot.GetPropertyValue("InstanceName") == instanceName)
        {
            prot.InvokeMethod("SetEnable", null);
        }
    }

    uint sqlServerService = 1;
    uint sqlServiceStopped = 1;
    foreach (ManagementObject instance in sqlService.GetInstances())
    {
        if ((uint)instance.GetPropertyValue("SqlServiceType") == sqlServerService &&
            (string)instance.GetPropertyValue("ServiceName") == instanceName)
        {
            instance.Get();
            if ((uint)instance.GetPropertyValue("State") != sqlServiceStopped)
            {
                instance.InvokeMethod("StopService", null);
            }
            instance.InvokeMethod("StartService", null);
        }
    }
}

Этот код предполагает ссылку на проект System.Management.dll и следующий оператор using:

using System.Management;

В блоге Sql Protocols есть статья , подробно описывает, что делает приведенный выше код.

Примечание. Если брандмауэр блокирует порт (-ы), вы все равно не сможете получить доступ к серверу через TCP.

9
ответ дан 18 December 2019 в 14:44
поделиться

Взгляните на куст HKLM \ SOFTWARE \ Microsoft \ Microsoft SQL Server \ MSSQL10.MSSQLSERVER \ MSSQLServer \ SuperSocketNetLib \ Tcp . Есть такие ключи, как Enabled , ListenOnAllIPs и список IP-адресов для прослушивания.

4
ответ дан 18 December 2019 в 14:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: