主要还想解决这个问题:   怎么让SQL服务器停止?

解决方案 »

  1.   

    // W3SVC ---Web Service      MSSQLSERVER --- MS SQL Service  OverTime 为超时处理,单位秒
    Function CtrlService(ServiceName: string; Status: Boolean; OverTime:Integer): Boolean;  //控制WINDOWS的服务启动与停止
    var
      lpServiceArgVectors: Pchar;
      hscmanager, hService: SC_HANDLE;
      returnstatus: TServiceStatus;
      i:Integer;
    begin
      Result := True;
      lpServiceArgVectors := nil;
      hscmanager := OpenSCManager(nil, nil, SC_MANAGER_ENUMERATE_SERVICE); // 打开service control manager database
      if hscmanager = 0 then begin Result := False; exit; end;
      hService := OpenService(hscmanager, Pchar(ServiceName), SERVICE_ALL_ACCESS); //打开W3SVC服务
      if hService = 0 then
      begin
        CloseServiceHandle(hscmanager);
        CloseServiceHandle(hService);
        Result := False;
        exit;
      end;
      if not QueryServiceStatus(hService, returnstatus) then
      begin
        CloseServiceHandle(hscmanager);
        CloseServiceHandle(hService);
        Result := False;
        exit;
      end; //查看该Service的状态
      i:=0;
      if Status then //如果是启动服务
      begin
        if (returnstatus.dwCurrentState = SERVICE_STOPPED) and (not StartService(hService, 0, lpServiceArgVectors)) then
          Result := False
        else
          while (i<OverTime) and (returnstatus.dwCurrentState <> SERVICE_RUNNING) do
          begin
            Sleep(1000);
            QueryServiceStatus(hService, returnstatus);
            Application.ProcessMessages;
            inc(i);
          end;
        CloseServiceHandle(hscmanager);
        CloseServiceHandle(hService);
        exit;
      end
      else //如果是停止服务
      begin
        if (returnstatus.dwCurrentState = SERVICE_RUNNING) and (not ControlService(hService, SERVICE_CONTROL_STOP, returnstatus)) then
          Result := False
        else
          while (i<OverTime) and (returnstatus.dwCurrentState <> SERVICE_STOPPED) do
          begin
            Sleep(1000);
            QueryServiceStatus(hService, returnstatus);
            Application.ProcessMessages;
            inc(i);
          end;
        CloseServiceHandle(hscmanager);
        CloseServiceHandle(hService);
        exit;
      end;
    end;
      

  2.   

    // W3SVC ---Web Service      MSSQLSERVER --- MS SQL Service  OverTime 为超时处理,单位秒
    Function CtrlService(ServiceName: string; Status: Boolean; OverTime:Integer): Boolean;  //控制WINDOWS的服务启动与停止
    var
      lpServiceArgVectors: Pchar;
      hscmanager, hService: SC_HANDLE;
      returnstatus: TServiceStatus;
      i:Integer;
    begin
      Result := True;
      lpServiceArgVectors := nil;
      hscmanager := OpenSCManager(nil, nil, SC_MANAGER_ENUMERATE_SERVICE); // 打开service control manager database
      if hscmanager = 0 then begin Result := False; exit; end;
      hService := OpenService(hscmanager, Pchar(ServiceName), SERVICE_ALL_ACCESS); //打开W3SVC服务
      if hService = 0 then
      begin
        CloseServiceHandle(hscmanager);
        CloseServiceHandle(hService);
        Result := False;
        exit;
      end;
      if not QueryServiceStatus(hService, returnstatus) then
      begin
        CloseServiceHandle(hscmanager);
        CloseServiceHandle(hService);
        Result := False;
        exit;
      end; //查看该Service的状态
      i:=0;
      if Status then //如果是启动服务
      begin
        if (returnstatus.dwCurrentState = SERVICE_STOPPED) and (not StartService(hService, 0, lpServiceArgVectors)) then
          Result := False
        else
          while (i<OverTime) and (returnstatus.dwCurrentState <> SERVICE_RUNNING) do
          begin
            Sleep(1000);
            QueryServiceStatus(hService, returnstatus);
            Application.ProcessMessages;
            inc(i);
          end;
        CloseServiceHandle(hscmanager);
        CloseServiceHandle(hService);
        exit;
      end
      else //如果是停止服务
      begin
        if (returnstatus.dwCurrentState = SERVICE_RUNNING) and (not ControlService(hService, SERVICE_CONTROL_STOP, returnstatus)) then
          Result := False
        else
          while (i<OverTime) and (returnstatus.dwCurrentState <> SERVICE_STOPPED) do
          begin
            Sleep(1000);
            QueryServiceStatus(hService, returnstatus);
            Application.ProcessMessages;
            inc(i);
          end;
        CloseServiceHandle(hscmanager);
        CloseServiceHandle(hService);
        exit;
      end;
    end;
      

  3.   

    大家注意.我提供的函数需要加上头文件声明:   uses   WinSVC
    把delay函数改成 sleep函数 
      

  4.   

    你这样可以远程吗,晕
    我想楼主的意思是想对数据库进行还原吧,这个时候如果有人在使用该数据库的话你是不能还原的,所以楼主想把SQL服务关掉,对吗
    如果我猜的对的话,其实解决方法不必这么麻烦,SQL可以直接关掉连接的线程,只供你一个人进行访问,这个时候你可以进行还原操作了,具体要写个存储过程,很方便,我现在没有,你可以到网上搜索一下
      

  5.   

    楼上的也太自作XX了,用windows的service是对的
      

  6.   

    直接关掉不就是了
    楼主你是要通过程序还是永远不用
    还是说先关掉了重起了还可以在用
    如果说纯粹是关掉SQL那就直接关掉SQL服务
      

  7.   

    To: hr168(Ocb.Hr) 
        如果你不懂的话就闭上你的嘴好好学习学习,别自作聪明了好不好!用我下面的程序去调用上面的函索看看对不对!!!!!(delphi7.0+sql2000); 
    var
       bool:boolean;
    begin
       bool:=CtrlService('MSSQLSERVER',false,10000);
       if bool=false then
         showmessage('false')
       else
         showmessage('true');
    end;
      

  8.   

    某人了不起?
    ------------------------------------   《CSDN论坛新助手 CSDN's forum Explorer》
      1、更快速的浏览
      2、更方便地保存
      3、更快捷的接收短信
      下载地址:http://www.seeyou.com.cn/CoolSlob/CSDNExplorer.exe
      

  9.   

    MSSQLSERVER--------在WINDOWS把这个服务停止了,想用时又可以启动它不就可以啦
    C:\PROGRA~1\MICROS~3\MSSQL\binn\sqlservr.exe
      

  10.   

    TO seahjun(东邪):   呵呵,谢谢谢谢,高手还真谈不上,只是会利用网络而已.TO  BigAngell (风雨英雄) :   问题解决了吗?
      

  11.   

    princesd(中原)   完全无误!
      

  12.   

    晕死,我现在没条件试验哦,楼主的SQL服务器是和程序在一台电脑上的,问题是不在一台呢,你同样可以远程停止吗?如果你没有权限呢,这样也可以,我是不懂网络,但是你也太单一了吧?我们公司的SQL全挂在服务器上,我们根本在本地就控制不了这个服务,所以我才在网上找到了那个结束用户的线程的存贮过程,哎,几天没有来。