什么是在SQL Server 2005和2008上启用TCP的注册表设置?

Raj*_*sh 5 c# sql-server wmi sql-server-2005 sql-server-2008

我想以编程方式在SQL Server上启用TCP连接.我相信我们可以通过修改注册表项并重新启动SQL Server服务来实现此目的.我应该编辑哪个注册表?

Voi*_*ler 9

除非您有充分的理由直接修改注册表,否则我建议您考虑使用WMI.WMI将为您提供更多版本无关的实现.可以通过System.Management命名空间访问WMI .你可以拥有看起来像这样的代码.

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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

此代码假定项目引用System.Management.dll和以下using语句:

using System.Management;
Run Code Online (Sandbox Code Playgroud)

的Sql协议博客有文章说进入一些细节,以什么上面的代码在做什么.

注意:如果防火墙阻止端口,您仍然无法通过TCP访问服务器.


Ant*_*lev 5

看看HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQLServer\SuperSocketNetLib\Tcp蜂巢。有诸如 、 之类的键Enabled以及ListenOnAllIPs要侦听的 IP 地址列表。