我已经检查了其他问题和其他答案,但它不解决我的问题。
这是一个查询,这可以运行在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#代码=>上面的查询输出是来自于 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。 我错在哪里?
有一点是,Current应用程序正在使用这个还原数据库,所以我的是这个数据库在还原数据库时有一个连接。它的问题是什么?
如何实现这个问题?
如果没有发生异常,则还原成功完成。返回值为 ExecuteNonQuery
是指该批次返回的行数,如果没有返回行数,则为-1。RESTORE
不返回行数。
这个还原脚本会在操作期间强制终止与数据库的现有连接,因此当前的应用程序连接将受到影响。根据错误的处理方式(如重试),这可能会影响应用程序的功能。