Esempio n. 1
0
        private void RestoreAtTimeExecute(ServerAccess ba, SqlServerAccess sa, string c, string dbName, DateTime time, RestoreOption opt)
        {
            try
            {
                using (new NetworkConnection(ba.uri, new NetworkCredential(ba.username, ba.password)))
                {
                    string        path             = Path.Combine(ba.uri, ba.dailyfolder, c);
                    DirectoryInfo dir              = new DirectoryInfo(path);
                    FileInfo[]    files            = dir.GetFiles("*.bak").OrderByDescending(p => p.CreationTime).ToArray();
                    var           f                = files.FirstOrDefault();
                    var           filePath         = f.FullName;
                    var           creationDate     = f.CreationTime;
                    FileInfo[]    transactionFiles = dir.GetFiles("*.trn").OrderByDescending(p => p.CreationTime).ToArray();
                    using (new NetworkConnection(sa.uri, new NetworkCredential(sa.username, sa.password)))
                    {
                        string destPath = Path.Combine(sa.uri, sa.folder, f.Name);
                        if (File.Exists(destPath))
                        {
                            File.Delete(destPath);
                        }
                        File.Copy(filePath, destPath);
                        var bakFilePath          = destPath;
                        var transactionFilesPath = CopyAllTransactionFiles(transactionFiles, sa, creationDate, time);

                        destPath = destPath.Replace(sa.uri, sa.disk);
                        var transactionFilesDestPath = new List <string>();
                        foreach (var tf in transactionFilesPath)
                        {
                            transactionFilesDestPath.Add(tf.Replace(sa.uri, sa.disk));
                        }

                        SMOHelper restoreInstance = new SMOHelper(sa);
                        restoreInstance.RestoreAtTime(destPath, transactionFilesDestPath, time, dbName, opt);
                        if (File.Exists(bakFilePath))
                        {
                            File.Delete(bakFilePath);
                        }
                        foreach (var fileToDel in transactionFilesPath)
                        {
                            if (File.Exists(fileToDel))
                            {
                                File.Delete(bakFilePath);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.Error(ex.Message);
            }
        }