Резервное копирование и восстановление базы данных SQL с помощью system.data.sqlclient
У меня есть проект Windows Form, в котором я создал локальную базу данных типа SQL. Это файл MDF. Я использую System.Data.SqlClient для открытия базы данных, чтения и записи в нее.
Он работает нормально, за исключением возможности резервного копирования и восстановления.
Моя цель состоит в том, чтобы иметь возможность сделать резервную копию базы данных (в файл MDF), а затем иметь возможность восстановить ее, и все это из моего приложения.
******* ОБНОВЛЕНИЕ ОТ 19 ИЮНЯ **********************************************************
Я делаю некоторый прогресс, но все еще не могу выполнить восстановление. Во-первых, моя строка подключения и код для подключения-это:
String connectString = "Data Source=(LocalDB)\\MSSQLLocalDB; AttachDbFilename = " + startup_dir + "\\TAS_Dbase\\MyDataBase.mdf; Integrated Security = True"; DB_Connection = new SqlConnection(connectString); DB_Connection.Open();
Код для восстановления:
private void button2_Click(object sender, EventArgs e) { String dbName = getDBname(); String buPath = "'" + db_path + "\\Backup.bak'"; sqlString = "RESTORE DATABASE " + dbName + " FROM DISK = " + buPath; command = new SqlCommand(sqlString, DB_Connection); command.ExecuteNonQuery(); }
Выполнение команды вызывает следующее исключение.
Необработанное исключение типа "System.Data.SqlClient.SqlException" произошло в System.Data.dll
Дополнительная информация: восстановление не может обработать базу данных 'C:\USERS\VICTOR\DOCUMENTS\VISUAL STUDIO 2015\PROJECTS\DB_TEST\DB_TEST\BIN\DEBUG\TAS_DBASE\MYDATABASE.MDF', потому что он используется в этом сеансе. При выполнении этой операции рекомендуется использовать базу данных master.
Восстановление базы данных завершается ненормально.
Открытие базы данных препятствует восстановлению. Есть ли способ подключиться к движку SQL Server, не открывая базу данных (может ли это сработать) ? Что я должен сделать, чтобы избежать этой проблемы?
Что я уже пробовал:
Я попробовал следующее, Где DBname-это имя базы данных. В данном случае это так -
"\"C:\\USERS\\VICTOR\\DOCUMENTS\\VISUAL СТУДИЯ 2015\\ПРОЕКТЫ\\DB_TEST\\DB_TEST\\БИН\\ОТЛАДКИ\\TAS_DBASE\\ДАННЫХ MYDATABASE.МДФ\""
sqlString = "BACKUP DATABASE " + DBname + " TO DISK = '" + path_to_backup; command = new SqlCommand(sqlString, DB_Connection); command.ExecuteNonQuery();
Резервное копирование, по-видимому, выполняется, и создается файл "Backup.mdf". Однако если я попытаюсь подключиться к файлу резервной копии, то получу следующее исключение:
Необработанное исключение типа "System.Data.SqlClient.SqlException" произошло в System.Data.dll
Дополнительная информация: не удается открыть базу данных "C:\USERS\VICTOR\DOCUMENTS\VISUAL STUDIO 2015\PROJECTS\DB_TEST\DB_TEST\BIN\DEBUG\TAS_DBASE\BACKUP.MDF" запрашивается логином. Ошибка входа в систему.
Не удалось войти в систему для пользователя "Vics_PC\Victor".
Я считаю, что созданный файл резервной копии на самом деле не является файлом типа MDF. Я отметил, что он примерно на 200 кб меньше, чем исходный файл MDF.
Есть ли способ достичь моей цели?