首页 > 解决方案 > 从应用程序恢复时的 SQL 查询问题

问题描述

我想要做的是在 asp.net 应用程序上创建一个按钮来恢复保存的 SQL 备份。

我创建了一个程序如下,

create procedure sp_REstorefromdesktop @db varchar(100) , @varpath varchar(100)
as 
begin

declare @varfull  varchar(150) ;
set @varfull = 'C:\Users\xxxxxxxxxx\Documents\SQL Server Management Studio\Backup Databases\'+ @varpath;
DECLARE @SQL  NVARCHAR(MAX)
SET @SQL = CONCAT('ALTER DATABASE ',@db,' SET SINGLE_USER WITH ROLLBACK IMMEDIATE;');
EXEC(@SQL)



RESTORE DATABASE @db FROM DISK = @varfull WITH  FILE = 1,  NOUNLOAD,  STATS = 10
SET @SQL = CONCAT('ALTER DATABASE ',@db,' SET MULTI_USER;');
EXEC(@SQL)

end
EXEC sys.sp_MS_marksystemobject sp_REstorefromdesktop
use master
exec [master].dbo.sp_REstorefromdesktop 'BIJOU' ,'Test07222020151826.bak'

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

问题是它在 SQL Server Management Studio 中工作,但我无法执行查询,因为它断开连接,而且我怀疑这my entity与它有关。

编辑#2:

应用程序中的代码:

try
{
    if (con.State != ConnectionState.Open)
        con.Open();
    SqlCommand cmd0 = new SqlCommand(" use master ; exec sp_REstorefromdesktop '" + Database+"' ,'"+Filepath+"' ", con);
    cmd0.ExecuteNonQuery();
                    
                    
    con.Close();
    Label2.Text = "Done";
}
catch (Exception ex)
{
    Label2.Text = ex.Message;
}

编辑#3 ,因此它似乎无法按预期工作,...等待我需要确认的内容,然后我将发布

编辑#4

事实证明,我遇到了所有查询的问题:

SqlCommand cmd1 = new SqlCommand("ALTER DATABASE [" + Database + "] SET SINGLE_USER WITH ROLLBACK IMMEDIATE ", con);


SqlCommand cmd2 = new SqlCommand("USE MASTER RESTORE DATABASE [" + Database + "] FROM DISK='" + Filepath + "' WITH  FILE = 1,  NOUNLOAD,  STATS = 10", con);


SqlCommand cmd3 = new SqlCommand("ALTER DATABASE [" + Database + "] SET MULTI_USER", con);

标签: c#sql-serverdatabase

解决方案


抱歉,我解决了问题,我现在觉得自己像个愚蠢的人,无论如何问题是我颠倒了 2 个变量

String Filepath = DropDownList1.Text;
        string  Database = DropDownList3.Text;

现在解决方案有效,再次抱歉。


推荐阅读