Sql server 以编程方式配置SQL Server TCP设置
每当我们为客户机安装SQLServer2008R2时,都有一个手动过程。我们为实例启用Sql server 以编程方式配置SQL Server TCP设置,sql-server,delphi,configuration,Sql Server,Delphi,Configuration,每当我们为客户机安装SQLServer2008R2时,都有一个手动过程。我们为实例启用TCP/IP和命名管道协议,将TCP动态端口设置为0,并将TCP端口设置为非标准端口号(为了安全起见,特意禁用浏览器)。始终使用显式端口号进行连接(即192.168.1.10012345) 如何从Delphi以编程方式配置这些服务器TCP设置?您可以使用WMI类,该类是的一部分 要访问此类,必须根据SQL Server版本连接到适当的命名空间 SQL Server 2005 - ComputerManageme
TCP/IP
和命名管道
协议,将TCP动态端口
设置为0,并将TCP端口
设置为非标准端口号(为了安全起见,特意禁用浏览器)。始终使用显式端口号进行连接(即192.168.1.10012345
)
如何从Delphi以编程方式配置这些服务器TCP设置?您可以使用WMI类,该类是的一部分
要访问此类,必须根据SQL Server版本连接到适当的命名空间
SQL Server 2005 - ComputerManagement
SQL Server 2008 - ComputerManagement10
SQL Server 2012 - ComputerManagement11
请在SQL Server 2008中尝试此示例
{$APPTYPE CONSOLE}
uses
SysUtils,
ActiveX,
ComObj,
Variants;
procedure EnableSQLServerNetworkProtocol(Const Protocol : string; EnableProtocol: Boolean);
const
WbemUser ='';
WbemPassword ='';
WbemComputer ='localhost';
wbemFlagForwardOnly = $00000020;
var
FSWbemLocator : OLEVariant;
FWMIService : OLEVariant;
FWbemObjectSet: OLEVariant;
FWbemObject : OLEVariant;
oEnum : IEnumvariant;
iValue : LongWord;
begin;
FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
FWMIService := FSWbemLocator.ConnectServer(WbemComputer, 'root\Microsoft\SqlServer\ComputerManagement10', WbemUser, WbemPassword);
FWbemObjectSet:= FWMIService.ExecQuery(Format('SELECT * FROM ServerNetworkProtocol Where ProtocolName="%s"', [Protocol]),'WQL',wbemFlagForwardOnly);
oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
if oEnum.Next(1, FWbemObject, iValue) = 0 then
//if FWbemObject.Enabled<>EnableProtocol then
Writeln('Result '+VarToStr(FWbemObject.SetEnable(EnableProtocol))); // 0 means OK
end;
begin
try
CoInitialize(nil);
try
EnableSQLServerNetworkProtocol('Tcp', True);// TCP/IP
EnableSQLServerNetworkProtocol('Np', True); // Named Pipes
finally
CoUninitialize;
end;
except
on E:EOleException do
Writeln(Format('EOleException %s %x', [E.Message,E.ErrorCode]));
on E:Exception do
Writeln(E.Classname, ':', E.Message);
end;
Writeln('Press Enter to exit');
Readln;
end.
{$APPTYPE控制台}
使用
SysUtils,
ActiveX,
科莫布,
变体;
过程启用SQLServerNetworkProtocol(常量协议:字符串;启用协议:布尔值);
常数
WbemUser='';
WbemPassword='';
WbemComputer='localhost';
wbemFlagForwardOnly=$00000020;
变量
FSWbemLocator:OLEVariant;
FWMIService:油变型;
FWbemObjectSet:OLEVariant;
FWbemObject:油变异体;
oEnum:IEnumvariant;
伊瓦鲁:长词;
开始;
FSWbemLocator:=CreateOleObject('WbemScripting.SWbemLocator');
FWMIService:=FSWbemLocator.ConnectServer(WbemComputer,'root\Microsoft\SqlServer\ComputerManagement10',WbemUser,WbemPassword);
FWbemObjectSet:=FWMIService.ExecQuery(格式('SELECT*FROM ServerNetworkProtocol,其中ProtocolName=“%s]”,[Protocol]),'WQL',wbemFlagForwardOnly);
oEnum:=IUnknown(FWbemObjectSet.\u NewEnum)作为IEnumVariant;
如果oEnum.Next(1,FWbemObject,iValue)=0,则
//如果FWbemObject.EnabledEnableProtocol,则
Writeln('Result'+VarToStr(FWbemObject.SetEnable(EnableProtocol));//0表示OK
结束;
开始
尝试
共初始化(零);
尝试
启用SQLServerNetworkProtocol('Tcp',True);//TCP/IP
启用SQLServerNetworkProtocol('Np',True);//命名管道
最后
协商初始化;
结束;
除了
关于E:EOleException do
Writeln(格式('EOleException%s%x',[E.Message,E.ErrorCode]);
关于E:Exception-do
Writeln(E.Classname,“:”,E.Message);
结束;
Writeln(“按回车键退出”);
Readln;
结束。
注意:此代码必须在安装SQL Server的同一台计算机上执行,如果要远程执行此任务,必须为WMI连接提供正确的登录参数(用户、密码、服务器)
要设置IP地址和端口,您可以使用和类。您可以使用WMI类,它是的一部分
要访问此类,必须根据SQL Server版本连接到适当的命名空间
SQL Server 2005 - ComputerManagement
SQL Server 2008 - ComputerManagement10
SQL Server 2012 - ComputerManagement11
请在SQL Server 2008中尝试此示例
{$APPTYPE CONSOLE}
uses
SysUtils,
ActiveX,
ComObj,
Variants;
procedure EnableSQLServerNetworkProtocol(Const Protocol : string; EnableProtocol: Boolean);
const
WbemUser ='';
WbemPassword ='';
WbemComputer ='localhost';
wbemFlagForwardOnly = $00000020;
var
FSWbemLocator : OLEVariant;
FWMIService : OLEVariant;
FWbemObjectSet: OLEVariant;
FWbemObject : OLEVariant;
oEnum : IEnumvariant;
iValue : LongWord;
begin;
FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
FWMIService := FSWbemLocator.ConnectServer(WbemComputer, 'root\Microsoft\SqlServer\ComputerManagement10', WbemUser, WbemPassword);
FWbemObjectSet:= FWMIService.ExecQuery(Format('SELECT * FROM ServerNetworkProtocol Where ProtocolName="%s"', [Protocol]),'WQL',wbemFlagForwardOnly);
oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
if oEnum.Next(1, FWbemObject, iValue) = 0 then
//if FWbemObject.Enabled<>EnableProtocol then
Writeln('Result '+VarToStr(FWbemObject.SetEnable(EnableProtocol))); // 0 means OK
end;
begin
try
CoInitialize(nil);
try
EnableSQLServerNetworkProtocol('Tcp', True);// TCP/IP
EnableSQLServerNetworkProtocol('Np', True); // Named Pipes
finally
CoUninitialize;
end;
except
on E:EOleException do
Writeln(Format('EOleException %s %x', [E.Message,E.ErrorCode]));
on E:Exception do
Writeln(E.Classname, ':', E.Message);
end;
Writeln('Press Enter to exit');
Readln;
end.
{$APPTYPE控制台}
使用
SysUtils,
ActiveX,
科莫布,
变体;
过程启用SQLServerNetworkProtocol(常量协议:字符串;启用协议:布尔值);
常数
WbemUser='';
WbemPassword='';
WbemComputer='localhost';
wbemFlagForwardOnly=$00000020;
变量
FSWbemLocator:OLEVariant;
FWMIService:油变型;
FWbemObjectSet:OLEVariant;
FWbemObject:油变异体;
oEnum:IEnumvariant;
伊瓦鲁:长词;
开始;
FSWbemLocator:=CreateOleObject('WbemScripting.SWbemLocator');
FWMIService:=FSWbemLocator.ConnectServer(WbemComputer,'root\Microsoft\SqlServer\ComputerManagement10',WbemUser,WbemPassword);
FWbemObjectSet:=FWMIService.ExecQuery(格式('SELECT*FROM ServerNetworkProtocol,其中ProtocolName=“%s]”,[Protocol]),'WQL',wbemFlagForwardOnly);
oEnum:=IUnknown(FWbemObjectSet.\u NewEnum)作为IEnumVariant;
如果oEnum.Next(1,FWbemObject,iValue)=0,则
//如果FWbemObject.EnabledEnableProtocol,则
Writeln('Result'+VarToStr(FWbemObject.SetEnable(EnableProtocol));//0表示OK
结束;
开始
尝试
共初始化(零);
尝试
启用SQLServerNetworkProtocol('Tcp',True);//TCP/IP
启用SQLServerNetworkProtocol('Np',True);//命名管道
最后
协商初始化;
结束;
除了
关于E:EOleException do
Writeln(格式('EOleException%s%x',[E.Message,E.ErrorCode]);
关于E:Exception-do
Writeln(E.Classname,“:”,E.Message);
结束;
Writeln(“按回车键退出”);
Readln;
结束。
注意:此代码必须在安装SQL Server的同一台计算机上执行,如果要远程执行此任务,必须为WMI连接提供正确的登录参数(用户、密码、服务器)
要设置IP地址和端口,您可以使用和类。实际上,答案是:根据您的SQL server版本更改注册表中的端口号,然后重新启动服务…删除了close vote,因为这个问题收到了一个很好的备选答案。实际上,答案是:根据您的SQL server版本更改注册表中的端口号,然后重新启动服务…删除关闭投票,因为此问题收到了一个很好的备选答案。^+1。我能为我做啤酒吗?:)+1并接受,即使我仍然直接使用注册表(WMI可以停止,注册表不能)^+1。我能为我做啤酒吗?:)+1并接受,即使我仍然直接使用注册表(WMI可以停止,注册表无法停止)