![](/img/trans.png)
[英]How can I restore a .bak file to a new server without using the .mdf or .ldf files, programmatically with C#?
[英]Error in restoring BAK to MDF file
我正在使用以下代碼將 BAK 文件還原為 MDF 文件,最初我創建了一個數據庫,然后嘗試使用我的 BAK 文件還原它,但出現了一些錯誤:我使用打開文件對話框 select 我的 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”上嘗試“RestoreContainer::ValidateTargetForCreation”時返回錯誤“32(無法檢索此錯誤的文本。原因:15105)” \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 復制了腳本)
你也可以試試這個。
完成還原過程后,您的數據庫就可以使用了。
注意:您必須創建一個新數據庫才能恢復舊數據庫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.