【发布时间】:2017-06-01 07:39:59
【问题描述】:
我开发了一个具有备份和恢复功能的优秀应用程序。它工作正常。每次我为其 SQL Server 2008 R2 数据库添加新功能时,例如添加新的存储过程或用户定义的表类型来升级我的软件。
我的备份功能是这样的:
protected int BackUpDataBase(string dbName, string address)
{
try
{
using (_con)
{
string command = "Backup database " + dbName + " to disk='" + address + "'";
SqlCommand cmd = new SqlCommand(command, _con);
cmd.CommandType = CommandType.Text;
connect();
cmd.ExecuteNonQuery();
return 1;
}
}
catch (SqlException ex)
{
return ex.Number * (-1);
}
}
我的恢复功能在这里:
protected int RecoverDataBase(string dbName, string address)
{
try
{
SqlConnection temp = new SqlConnection(_addressMaster);
string Restore = "USE master" + Environment.NewLine;
if (CheckDatabaseExists(dbName))
{
Restore += @"ALTER DATABASE [" + dbName + "]" + Environment.NewLine;
Restore += @"SET OFFLINE WITH ROLLBACK IMMEDIATE" + Environment.NewLine;
Restore += @"ALTER DATABASE [" + dbName + "] SET ONLINE" + Environment.NewLine;
}
Restore += @"RESTORE DATABASE [" + dbName + "] FROM DISK = N'" + address + @"' WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 10" + Environment.NewLine;
Restore += @"ALTER DATABASE [" + dbName + "] SET Single_User WITH Rollback Immediate" + Environment.NewLine;
Restore += @"ALTER DATABASE [" + dbName + "] SET Multi_User" + Environment.NewLine;
using (temp)
{
using (SqlCommand cmd = new SqlCommand(Restore, temp))
{
cmd.CommandText = Restore;
cmd.CommandType = CommandType.Text;
temp.Open();
cmd.ExecuteNonQuery();
temp.Close();
return 1;
}
}
}
catch (SqlException ex)
{
return ex.Number * (-1);
}
}
一切都很好,但是!问题出在这里:我用新的存储过程等开发了升级后的 Windows 应用程序,然后将其安装到新计算机上,并希望将旧备份恢复到升级后的应用程序,所有新的存储过程和功能都将恢复到旧的,因为我恢复了整个旧备份不仅是它的数据。 那么如何使用 C# 和 SQL 查询从备份文件中仅恢复表数据呢?
【问题讨论】:
标签: c# sql-server sql-server-2008-r2 database-backups database-restore