Я попытался создать резервное копирование и восстановление базы данных в другую базу данных, резервное копирование работает, но восстановление не выполняется. Причина, когда я создаю резервную копию, также создает имя базы данных, USE Мастер Создание базы данных [Samplename] Тогда генерации всех таблиц данных так что, когда я пытаюсь восстановить с помощью C#, это попытаться Создание новой БД, как Samplename не мой новый SampleDB, то это дает исключениеКак восстановить файл Sqlserver .bak с новым именем базы данных с помощью C#
The file 'C:\Program Files (x86)\Microsoft SQL
Server\MSSQL11.BIZSQL\MSSQL\DATA\Product Company.mdf' cannot be
overwritten. It is being used by database 'Sample Product Company'.
File 'Sample Product Company' cannot be restored to 'C:\Program Files
(x86)\Microsoft SQL Server\MSSQL11.BIZSQL\MSSQL\DATA\Sample Product
Company.mdf'. Use WITH MOVE to identify a valid location for the file.
The file 'C:\Program Files (x86)\Microsoft SQL
Server\MSSQL11.BIZSQL\MSSQL\DATA\Sample Product Company_log.ldf' cannot be overwritten.
It is being used by database 'Sample Product Company'.
File 'Sample Product Company_log' cannot be restored to 'C:\Program Files
(x86)\Microsoft SQL Server\MSSQL11.BIZSQL\MSSQL\DATA\Sample Product
Company_log.ldf'. Use WITH MOVE to identify a valid location for the file.
Problems were identified while planning for the RESTORE statement. Previous
messages provide details.
RESTORE DATABASE is terminating abnormally.
Вы можете руководствоваться мне, как восстановить базу данных с помощью новой базы данных в SQlser2012R2
Пример кода для восстановления:
using (SqlConnection con = new SqlConnection(ConnectionString))
{
con.Open();
string UseMaster = "USE master";
SqlCommand UseMasterCommand = new SqlCommand(UseMaster, con);
UseMasterCommand.ExecuteNonQuery();
int iReturn = 0;
// If the database does not exist then create it.
string strCommand = string.Format("SET NOCOUNT OFF; SELECT COUNT(*) FROM master.dbo.sysdatabases where name=\'{0}\'", DatabaseName);
using (SqlCommand sqlCmd = new SqlCommand(strCommand, con))
{
iReturn = Convert.ToInt32(sqlCmd.ExecuteScalar());
}
if (iReturn == 0)
{
SqlCommand command = con.CreateCommand();
command.CommandText = "CREATE DATABASE " + DatabaseName;
command.ExecuteNonQuery();
}
ServerConnection serverConnection = new ServerConnection(con);
Microsoft.SqlServer.Management.Smo.Server srv = new Microsoft.SqlServer.Management.Smo.Server(serverConnection);
string Alter1 = @"ALTER DATABASE [" + DatabaseName + "] SET Single_User WITH Rollback Immediate";
SqlCommand Alter1Cmd = new SqlCommand(Alter1, con);
Alter1Cmd.ExecuteNonQuery();
string Restore = @"RESTORE Database [" + DatabaseName + "] FROM DISK = N'" + fileName + @"' WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 10";
SqlCommand RestoreCmd = new SqlCommand(Restore, con);
RestoreCmd.ExecuteNonQuery();
string Alter2 = @"ALTER DATABASE [" + DatabaseName + "] SET Multi_User";
SqlCommand Alter2Cmd = new SqlCommand(Alter2, con);
Alter2Cmd.ExecuteNonQuery();
}
Я проверил ваш код, и я не получаю никаких исключений, и восстановление будет успешным. Когда вы отлаживаете, какое значение у вас есть для переменной «fileName» – StackTrace
Имя файла: RestoreBackup. Я создаю резервную копию на другом компьютере и пытаюсь восстановить ее в своей системе, тогда она работает правильно, но если я вернусь на свою машину и восстановление ее не работает, то у меня есть Windows8.1 и Sqlserver2012 R2, а на другой машине есть Windows7 и Sqlserver2012R2 .. –