开始使用的一些信息:
我正在尝试将从计算机A获取的.bak文件还原到计算机B. 我想使用C#以编程方式执行此操作,但不使用SMO函数。
在SSMS(SQL Server Management Studio)中,我可以使用.bak文件手动还原数据库。我希望能够用C#运行程序。
只要我拥有.mdf和.ldf文件,我就可以恢复.bak文件,但不能没有它们。在SSMS中手动执行此操作似乎有效,因此我认为必须有一种方法可以使用C#执行此操作。这就是我所拥有的:
DBConnection connect1 = new DBConnection();
connect1.connectionString = "Data Source=" + textBox1.Text + "; Integrated Security=SSPI"; // textbox1 contains a user entered server name.
// Create a new database.
using (SqlConnection myConnection = new SqlConnection(connect1.connectionString))// set the connection to sql.
{
SqlCommand createDB = new SqlCommand("Create Database [" + dbName + "]", myConnection);
createDB.Connection.Open();
createDB.ExecuteNonQuery();
}
// Restore the data from the backup into the new database.
connect1 = new DBConnection();
connect1.connectionString = "Data Source=" + textBox1.Text + "; Initial Catalog=Master; Integrated Security=SSPI";
using (SqlConnection myConnection = new SqlConnection(connect1.connectionString))// set the connection to sql.
{
//SqlCommand createDB = new SqlCommand("Restore Database [" + dbName + "] FROM DISK = " + bakDirctory + " "
// + "WITH MOVE '" + oldDBName + "' TO '" + mdfDirectory + "', "
// + "MOVE '" + oldDBName + "_log' TO '" + ldfDirectory + "', "
// + "REPLACE", myConnection);
// oldDBName contains what the name of the database was when the .bak file was created.
SqlCommand createDB = new SqlCommand("Restore Database [" + dbName + "] FROM DISK = " + bakDirectory, myConnection);
createDB.Connection.Open();
createDB.ExecuteNonQuery();
}
代码段的注释部分有效,但需要使用.mdf和.ldf文件。下面的部分仅使用.bak文件,但在尝试运行该代码时出现未处理的异常:
备份集包含除现有' dbname'之外的数据库的备份。数据库
我认为这是因为新创建的数据库的数据库结构与.bak文件中的数据库结构不匹配。 (如果我有错误,请纠正我)。有没有办法让我只使用.bak文件恢复备份?提前感谢你花时间看这个。
答案 0 :(得分:2)
正如@DanGuzman所说,没有必要事先创建一个新的数据库。
按照(@ScottChamberlain)评论中的说明,我能够找到恢复数据库所需的脚本,而不使用.mdf或.ldf文件。确切的脚本是:
SqlCommand createDB = new SqlCommand("RESTORE DATABASE [" + dbName + "] FROM DISK = N'" + bakDirectory + "' " +
"WITH FILE = 2, MOVE N'" + oldDBName + "' TO N'C:\\Program Files\\Microsoft SQL Server\\MSSQL12.ANTSQLSERVER\\MSSQL\\DATA\\" + dbName + ".mdf', " +
"MOVE N'" + oldDBName + "_log' TO N'C:\\Program Files\\Microsoft SQL Server\\MSSQL12.ANTSQLSERVER\\MSSQL\\DATA\\" + dbName + "_log.ldf', NOUNLOAD, STATS = 5", myConnection);
(C:\ Program Files \ Microsoft SQL Server \ MSSQL12.ANTSQLSERVER \ MSSQL \ DATA \)路径是创建.mdf和.ldf文件的默认位置。