Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 以编程方式配置SQL Server TCP设置_Sql Server_Delphi_Configuration - Fatal编程技术网

Sql server 以编程方式配置SQL Server TCP设置

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

每当我们为客户机安装SQLServer2008R2时,都有一个手动过程。我们为实例启用
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可以停止,注册表无法停止)