Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.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
C# 备份或还原在mdf C上不起作用?_C#_Winforms_Backup_Restore_Mdf - Fatal编程技术网

C# 备份或还原在mdf C上不起作用?

C# 备份或还原在mdf C上不起作用?,c#,winforms,backup,restore,mdf,C#,Winforms,Backup,Restore,Mdf,我正在尝试用C#中的.MDF文件备份和恢复我的数据库。我认为它是备份,因为我看到了一个.BAK文件,但当我还原时,它不起作用。两者在运行时都没有错误,但我认为我的代码有问题。这是我的密码: public void BackupDatabase(String databaseName, String destinationPath) { ServerConnection connection = new ServerConnection(conn);

我正在尝试用C#中的
.MDF
文件备份
恢复
我的数据库。我认为它是备份,因为我看到了一个
.BAK
文件,但当我还原时,它不起作用。两者在运行时都没有错误,但我认为我的代码有问题。这是我的密码:

    public void BackupDatabase(String databaseName, String destinationPath)
    {

        ServerConnection connection = new ServerConnection(conn);
        Backup sqlBackup = new Backup();                    

        sqlBackup.Action = BackupActionType.Database;
        sqlBackup.BackupSetDescription = "ArchiveDataBase:" +
                                         DateTime.Now.ToShortDateString();
        sqlBackup.BackupSetName = "Archive";

        sqlBackup.Database = databaseName;

        BackupDeviceItem deviceItem = new BackupDeviceItem(destinationPath, DeviceType.File);
        Server sqlServer = new Server(connection);

        Database db = sqlServer.Databases[databaseName];

        sqlBackup.Initialize = true;
        sqlBackup.Checksum = true;
        sqlBackup.ContinueAfterError = true;

        sqlBackup.Devices.Add(deviceItem);
        sqlBackup.Incremental = false;

        sqlBackup.ExpirationDate = DateTime.Now.AddDays(3);
        sqlBackup.LogTruncation = BackupTruncateLogType.Truncate;

        sqlBackup.FormatMedia = false;

        sqlBackup.SqlBackup(sqlServer);
    }

    public void RestoreDatabase(String databaseName, String filePath, String dataFilePath, String logFilePath)
    {
            ServerConnection connection = new ServerConnection(conn);
            Restore sqlRestore = new Restore();
            BackupDeviceItem deviceItem = new BackupDeviceItem(filePath, DeviceType.File);
            sqlRestore.Devices.Add(deviceItem);
            sqlRestore.Database = databaseName;

            Server sqlServer = new Server(connection);

            Database db = sqlServer.Databases[databaseName];
            sqlRestore.Action = RestoreActionType.Database;
            String dataFileLocation = dataFilePath + databaseName + ".mdf";
            String logFileLocation = logFilePath + databaseName + "_Log.ldf";
            db = sqlServer.Databases[databaseName];
            RelocateFile rf = new RelocateFile(databaseName, dataFileLocation);

            sqlRestore.RelocateFiles.Add(new RelocateFile(databaseName, dataFileLocation));
            sqlRestore.RelocateFiles.Add(new RelocateFile(databaseName+"_log", logFileLocation));
            sqlRestore.ReplaceDatabase = true;

            sqlRestore.SqlRestore(sqlServer);
            db = sqlServer.Databases[databaseName];
            db.SetOnline();
            sqlServer.Refresh();
    }

    private void backupToolStripMenuItem1_Click(object sender, EventArgs e)
    {
        saveFileDialogBackUp.FileName = fileName;// +".bak";
        saveFileDialogBackUp.Filter = "Backup File (*.bak)|*.bak";
        saveFileDialogBackUp.Title = "File Location";
        saveFileDialogBackUp.InitialDirectory = AppDomain.CurrentDomain.BaseDirectory + @"Sauvegardes";
            if (saveFileDialogBackUp.ShowDialog() == DialogResult.OK)
            {
            BackupDatabase("dbCPS", saveFileDialogBackUp.FileName);
            MessageBox.Show("Backup Successful!", "CPS Backup", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
    }

    private void restoreToolStripMenuItem_Click(object sender, EventArgs e)
    {
        openFileDialogBackUp.Filter = "Backup File (*.bak)|*.bak";
        openFileDialogBackUp.FileName = "CPS";
        openFileDialogBackUp.InitialDirectory = AppDomain.CurrentDomain.BaseDirectory + @"Sauvegardes";
        if (openFileDialogBackUp.ShowDialog() == DialogResult.OK)
        {
            RestoreDatabase("dbCPS", openFileDialogBackUp.FileName, openFileDialogBackUp.FileName, openFileDialogBackUp.FileName);
            MessageBox.Show("Database Restored", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }                       
    }

您是否已在调试中逐步完成此步骤,以确保没有无声的错误消耗?事实上,它是否直接进入方法出口?是的。我放了一个messagebox,看看它是否成功,它是否成功。等等,我会编辑我的代码。你在调试器中完成了它吗?这怎么能指向一个有效的文件:
String dataFileLocation=dataFilePath+databaseName+“.mdf”?将所选文件的完整路径传递到这些变量中。请立即执行。现在我有一个错误。