从c#中恢复sql数据库

问题描述 投票:0回答:1

我已经检查了其他问题和其他答案,但它不解决我的问题。

这是一个查询,这可以运行在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应用程序正在使用这个还原数据库,所以我的是这个数据库在还原数据库时有一个连接。它的问题是什么?

如何实现这个问题?

c# sql-server-2012 restore
1个回答
0
投票

如果没有发生异常,则还原成功完成。返回值为 ExecuteNonQuery 是指该批次返回的行数,如果没有返回行数,则为-1。RESTORE 不返回行数。

这个还原脚本会在操作期间强制终止与数据库的现有连接,因此当前的应用程序连接将受到影响。根据错误的处理方式(如重试),这可能会影响应用程序的功能。

© www.soinside.com 2019 - 2024. All rights reserved.