Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Was sind Registrierungseinstellungen, um TCP auf SQL Server 2005 und 2008 zu aktivieren?

Sofern Sie keinen triftigen Grund haben, die Registrierung direkt zu ändern, empfehle ich Ihnen, die Verwendung von WMI in Erwägung zu ziehen . WMI stellt Ihnen eine Versionsunabhängigere Implementierung bereit. Auf WMI kann über System.Management zugegriffen werden Namensraum. Sie könnten Code haben, der in etwa so aussieht.

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

Dieser Code setzt einen Projektverweis auf System.Management.dll voraus und die folgende using-Anweisung:

using System.Management;

Die SQL-Protokolle blog hat einen Artikel das geht ein wenig ins Detail, was der obige Code macht.

Hinweis:Wenn eine Firewall den/die Port(s) blockiert, können Sie dennoch nicht über TCP auf den Server zugreifen.