昨天搜索了不少Sql server的备份与恢复代码。感觉以下方法比较容易懂,很方便,但没有备份程序,可惜呀,哪位大侠能提供与这个恢复相似的备份代码吗?

解决方案 »

  1.   

    呵呵,Sorry,忘记拷贝了。delphi
    转贴:
    try
     DM.ADOConnection1.Connected:=False;//关闭sbhy数据库
     DM.adocommand1.Connection:=DM.ADOConnection2;//转移连接到数据库master
     DM.ADOCommand1.CommandText:='ALTER DATABASE sbhy SET OFFLINE WITH ROLLBACK IMMEDIATE';//切断sbhy连接
     DM.ADOCommand1.Execute; DM.ADOCommand1.CommandText:='RESTORE DATABASE sbhy FROM DISK = ''' +opendialog1.FileName +'''';//恢复sbhy数据库
     DM.ADOCommand1.Execute;
     showmessage('完成');
    finally
     DM.ADOCommand1.CommandText:='ALTER DATABASE sbhy SET ONLINE WITH ROLLBACK IMMEDIATE';//重新连接sbhy数据库
     DM.ADOCommand1.Execute;
     DM.ADOConnection2.Connected:=False;//关闭master数据库
    end;
    DM.ADOConnection1.Connected:=True;//打开sbhy数据库
    DM.adocommand1.Connection:=DM.ADOConnection1;//恢复连接到数据库sbhy
      

  2.   

    这样备份行不行
    dm.c_backup.commandtext:='backup database oldwater to disk=:filename'var
      nowdate,bakname:String;
    begin
      nowdate:=formatdatetime('yyyy-MM-dd',now);
      savedialog1.Title:='请输入您要备份的数据文件名称...';
      saveDiaLog1.FileName:=nowdate;//一定要加上
      savedialog1.Filter:='bak files (*.bak)|*.bak';
      if savedialog1.Execute then begin
        bakname:=savedialog1.FileName+'.bak';
        dm.c_backup.Parameters.ParamByName('filename').Value:=bakname;
        dm.c_backup.Execute;
        showmessage('您已经成功备份,请妥善保存!');
      end;
    end;
      

  3.   

    恢复都行,备份有什么难得,只要写好SQL语句就行了
      

  4.   

    backup database sbhy to disk='C:\kk.bak'
      

  5.   

    var
        FADOCommand: TADOCommand;
        FOpenQuery: TADOQuery;
        FConnection: TADOConnection;
    初始化
      FConnection := TADOConnection.Create(nil);
      FConnection.LoginPrompt := False;
      FConnection.CommandTimeout := 3600;
      FConnection.ConnectionTimeout := 60;  FADOCommand := TADOCommand.Create(nil);
      FADOCommand.CommandTimeout := 3600;
      FADOCommand.CommandType := cmdText;
      FADOCommand.Connection := FConnection;  FOpenQuery := TADOQuery.Create(nil);
      FOpenQuery.Connection := FConnection;
    备份
    const
      BackupStr = 'use master backup database [%s] to DISK=''%s''  with init';
    begin
      Result := GetConnected;
      if not Result then Exit;
      with FADOCommand do
      begin
        try
          FADOCommand.CommandText := Format(BackupStr, [DBName(数据库名称), FileName(备份文件名称)]);
          FADOCommand.Execute;
          Result := True;
        except
          on E: Exception do
          begin
            FLastError := '数据库备份错误:' + E.Message;
            Result := False;
          end;
        end;
      end;恢复
    var
      LogicDBName, LogicLogName: string;//, FSQL
    const
      RestoreStr = 'Use master RESTORE database [%0:s]  FROM DISK = ''%1:s'' '
        + ' with Replace, Move ''%2:s'' to ''%3:s%0:s_data.mdf'',move ''%4:s'' to '
        + ' ''%3:s%0:s_log.ldf''';
    begin
      //判断连接数
      Result := CheckOtherConnected and GetLogicInfo(LogicDBName, LogicLogName);
      if not Result then
      begin
        Result := False;
        Exit;
      end;
      with FADOCommand do
      begin
          FADOCommand.CommandText := Format(RestoreStr, [DBName, FFileName,
            LogicDBName, GetDBDataFilePath, LogicLogName]);
        try
          FADOCommand.Execute;
          Result := True;
        except
          on E: Exception do
          begin
            FLastError := '数据恢复错误:' + E.Message;
            Result := False;
          end;
        end;
      end;
    附:
    function GetLogicInfo(var LogicDBName,
      LogicLogName: string): Boolean;
    begin
      with FOpenQuery do
      begin
        try
          Close;
          SQL.Clear;
          SQL.Add(Format('use master RESTORE FILELISTONLY FROM DISK =''%s''', [FFileName]));
          Open;
          First;
          while not Eof do
          begin
            if FieldByName('Type').AsString = 'D' then
              LogicDBName := FieldByName('LogicalName').AsString;
            if FieldByName('Type').AsString = 'L' then
              LogicLogName := FieldByName('LogicalName').AsString;
            Next;
          end;
          Result := True;
        except
          on E: EOleException do
          begin
            FLastError := Format('数据恢复错误:找不到备份文件"%s"。'
              +  #10#13'请确认文件是否存在。', [FFileName]);
            Result := False;
          end;
        end;
      end;
    end;function GetDBDataFilePath: string;
    begin
      with FOpenQuery do
      begin
        try
          Close;
          SQL.Clear;
          SQL.Text := 'select filename from master..sysdatabases where name = ''' + FConnectInfo.DB + '''';
          Open;
          Result := Fields[0].AsString;
          if Result <> EmptyStr then
          begin
            if Length(ExtractFileDir(Result)) <> 3 then
              Result := ExtractFileDir(Result) + '\'
            else
              Result := ExtractFileDir(Result)
          end
        except
          on E: Exception do
            FLastError := '得到系统路径错误:' + E.Message;
        end;
      end;
    end;