Восстановить sql базу из c# - PullRequest
0 голосов
/ 05 мая 2020

Я уже проверял другую проблему и другие ответы, но это не решает мою проблему.

Это запрос, и он может выполняться в SQL Management Studio

USE master Alter DATABASE SATS_Test Set Single_User With Rollback Immediate
 Restore Database SATS_Test From Disk =N'C:\Users\MyPath\05052020t_test.bak' 
 Alter Database SATS_Test Set Multi_User

Вот c# code => вышеуказанный запрос выводится из query

string connetionString = null;
                SqlConnection connection;
                SqlDataAdapter adapter = new SqlDataAdapter();

                connetionString = "Data Source="+DataAccessHelper.ServerName+";Initial Catalog=master;User ID="+DataAccessHelper.UserID+";Password="+DataAccessHelper.Password;
                connection = new SqlConnection(connetionString);


                string restorefilepath = ConfigurationManager.AppSettings["DBBackupPath"].ToString();
                restorefilepath = Path.Combine(restorefilepath, filename);

                string query = @"USE master Alter DATABASE " + DataAccessHelper.DatabaseName + @" Set Single_User With Rollback Immediate" + Environment.NewLine + " Restore Database " + DataAccessHelper.DatabaseName + @" From Disk =N'" + restorefilepath + "' " + Environment.NewLine + " Alter Database " + DataAccessHelper.DatabaseName + " Set Multi_User";

                int result = 0;

                using (SqlCommand cmd = new SqlCommand(query, connection))
                {
                    connection.Open();
                    result = cmd.ExecuteNonQuery();
                    connection.Close();
                }

Проблема в том, что этот результат из ExecuteNonQuery всегда возвращает -1. В чем я был неправ?

Одна вещь: текущее приложение использует эту базу данных восстановления, так что я буду, чтобы эта база данных имела соединение при восстановлении базы данных. Его проблема?

Как я могу этого добиться?

1 Ответ

0 голосов
/ 05 мая 2020

Если не произошло никаких исключений, восстановление завершено успешно. Возвращаемое значение ExecuteNonQuery - это количество строк, возвращаемое пакетом, или -1, если количество строк не возвращается. RESTORE не возвращает количество строк.

Этот сценарий восстановления принудительно завершает существующие подключения к базе данных на время операции, поэтому текущие подключения приложений будут затронуты. В зависимости от того, как обрабатываются ошибки (например, повторные попытки), это может повлиять на функциональность приложения.

...