Raj*_*sh 5 c# sql-server wmi sql-server-2005 sql-server-2008
我想以编程方式在SQL Server上启用TCP连接.我相信我们可以通过修改注册表项并重新启动SQL Server服务来实现此目的.我应该编辑哪个注册表?
除非您有充分的理由直接修改注册表,否则我建议您考虑使用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访问服务器.
看看HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQLServer\SuperSocketNetLib\Tcp蜂巢。有诸如 、 之类的键Enabled以及ListenOnAllIPs要侦听的 IP 地址列表。
| 归档时间: |
|
| 查看次数: |
2584 次 |
| 最近记录: |