我正在使用以下代码将 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 文件时出现奇怪的错误。
我使用上面的代码得到以下错误:
操作系统在“D:\7 mordad fara\Ofogh-Dsk\Ofogh-Dsk\bin\Debug \tmpDB635107927412887254.mdf'。
文件“IODB_Data”无法恢复到“D:\7 mordad fara\Ofogh-Dsk\Ofogh-Dsk\bin\Debug\tmpDB635107927412887254.mdf”。使用 WITH MOVE 标识文件的有效位置。
操作系统在“D:\7 mordad fara\Ofogh-Dsk\Ofogh-Dsk\bin\Debug”上尝试“RestoreContainer::ValidateTargetForCreation”时返回错误“32(无法检索此错误的文本。原因:15105) \tmpDB635107927412887254.ldf'。
文件“IODB_Log”无法恢复到“D:\7 mordad fara\Ofogh-Dsk\Ofogh-Dsk\bin\Debug\tmpDB635107927412887254.ldf”。使用 WITH MOVE 标识文件的有效位置。
在规划 RESTORE 语句时发现了问题。以前的消息提供了详细信息。
RESTORE DATABASE 异常终止。
但是当我在命令末尾插入“GO”时,出现以下错误:GO 附近的语法不正确
这里出了什么问题?当然,我已经使用 SQL Server Management Studio 成功测试了还原操作,并且为我的 BAK 文件找到了正确的逻辑名称(实际上我已经从 MSSMS 复制了脚本)