将BAK还原为MDF文件时出错

时间:2013-07-30 10:25:03

标签: c# sql-server restore

我正在使用以下代码将BAK文件恢复为MDF文件,最初我创建了一个数据库,然后尝试使用我的BAK文件恢复它,但是我收到了一些错误: 我使用打开的文件对话框来选择我的BAK文件

            openDialogConvert.ShowDialog();
        RegistryKey rk = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Microsoft SQL Server");
        String[] instances = (String[])rk.GetValue("InstalledInstances");
        string sqlname = "";
        if (instances.Length > 0)
        {
            foreach (String element in instances)
            {
                if (element == "MSSQLSERVER")
                    sqlname = System.Environment.MachineName;
                else
                    sqlname = System.Environment.MachineName + @"\" + element;

            }
        }


        String str;
        SqlConnection myConn = new SqlConnection("Server=" + sqlname + ";Integrated security=SSPI;database=master");
        string dbname = "tmpDB" + DateTime.Now.Ticks.ToString();
        str = "CREATE DATABASE " + dbname + " ON PRIMARY " +
            "(NAME = MyDatabase_Data, " +
            "FILENAME = '" + Environment.CurrentDirectory + "\\" + dbname + ".mdf') " +
            "LOG ON (NAME = MyDatabase_Log, " +
            "FILENAME = '" + Environment.CurrentDirectory + "\\" + dbname + ".ldf') ";

        SqlCommand myCommand = new SqlCommand(str, myConn);
        try
        {
            myConn.Open();
            myCommand.ExecuteNonQuery();
            MessageBox.Show("DataBase is Created Successfully", "MyProgram", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
        catch (System.Exception ex)
        {
            MessageBox.Show(ex.ToString(), "MyProgram", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
        myCommand.Dispose();

        str = @"RESTORE DATABASE [" + dbname + "] FROM  DISK = N'" + openDialogConvert.FileName + @"' WITH  MOVE N'IODB_Data' 
TO N'" + Environment.CurrentDirectory + @"\\" + dbname + @".mdf',  MOVE N'IODB_Log' 
TO N'" + Environment.CurrentDirectory + @"\\" + dbname + @".ldf',  REPLACE ";
            myCommand = new SqlCommand(str, myConn);
            myCommand.ExecuteNonQuery();
            myCommand.Dispose();
            myConn.Close();

我的新(空)数据库已成功创建,但在尝试恢复此新创建的数据库中的BAK文件时出现了奇怪的错误。

使用上面的代码我得到以下错误:

  

操作系统返回错误'32(无法检索文本   对于这个错误。原因:15105)'尝试时   'D:\ 7 mordad上的'RestoreContainer :: ValidateTargetForCreation'   FARA \ Ofogh-DSK \ Ofogh-DSK \ BIN \调试\ tmpDB635107927412887254.mdf”。

     

文件'IODB_Data'无法恢复为'D:\ 7 mordad   FARA \ Ofogh-DSK \ Ofogh-DSK \ BIN \调试\ tmpDB635107927412887254.mdf”。使用   WITH MOVE识别文件的有效位置。

     

操作系统返回错误'32(无法检索文本   对于这个错误。原因:15105)'尝试时   'D:\ 7 mordad上的'RestoreContainer :: ValidateTargetForCreation'   FARA \ Ofogh-DSK \ Ofogh-DSK \ BIN \调试\ tmpDB635107927412887254.ldf”。

     

文件'IODB_Log'无法恢复为'D:\ 7 mordad   FARA \ Ofogh-DSK \ Ofogh-DSK \ BIN \调试\ tmpDB635107927412887254.ldf”。使用   WITH MOVE识别文件的有效位置。

在规划RESTORE语句时发现了问题。以前的消息提供了详细信息。

RESTORE DATABASE正在异常终止。

但是当我在命令的末尾插入'GO'时,我收到以下错误: GO

附近的语法不正确

这里出了什么问题? 当然我已经使用SQL Server管理工作室成功测试了恢复操作,我发现了我的BAK文件的正确逻辑名称(事实上我已经从MSSMS复制了脚本)

0 个答案:

没有答案