Я хочу программно включить соединения TCP на SQL Server. Я полагаю, что мы можем достигнуть этого путем изменения ключей реестра и перезапуска сервиса SQL Server. Какой реестр я должен отредактировать?
Если у вас нет веских причин для изменения реестра напрямую, я предлагаю вам рассмотреть возможность использования 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.
Взгляните на куст HKLM \ SOFTWARE \ Microsoft \ Microsoft SQL Server \ MSSQL10.MSSQLSERVER \ MSSQLServer \ SuperSocketNetLib \ Tcp
. Есть такие ключи, как Enabled
, ListenOnAllIPs
и список IP-адресов для прослушивания.