Я разработал хорошее приложение с функцией резервного копирования и восстановления. Это работает нормально. каждый раз, когда я добавлял новые функции в базу данных 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?