问题描述
ALTER PROCEDURE [dbo].[usp_backup_database]
(@dbname sysname = NULL)
AS
BEGIN
SET NOCOUNT ON;
IF LEN (ISNULL (@dbname,'')) > 0
BEGIN
DECLARE @path VARCHAR(256) = 'D:\MSsql\MSsql10_50.MSsqlSERVER\MSsql\Backup\';
DECLARE @fileName VARCHAR(256);
DECLARE @fileDate VARCHAR(50) = REPLACE (CONVERT (VARCHAR(50),GETDATE (),126),':','-');
SET @fileName = @path + @dbname + '_' + @fileDate + '.BAK';
BEGIN TRY
BACKUP DATABASE @dbname
TO disK = @fileName WITH COMPRESSION;
END TRY
BEGIN CATCH
DECLARE @ErrorMessage NVARCHAR(4000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;
SELECT
@ErrorMessage = @fileName + N' ' + ERROR_MESSAGE (),@ErrorSeverity = ERROR_SEVERITY (),@ErrorState = ERROR_STATE ();
RAISERROR (@ErrorMessage,@ErrorSeverity,@ErrorState);
END CATCH
END
END
在 SSMS 中调用它工作正常,即 exec usp_backup_database 'dbname'
每次都成功备份 dbname!
但是,我有一个 C# 程序,我从中调用了这个存储过程,但它从不执行任何操作。完全没有例外,只是什么都没有发生。
我开始从 Entity Framework 6 调用它,这引发了一个非常无用的异常,这就是为什么我转而从 .NET 而不是 EF 调用存储过程(这解释了我代码中的时髦 EntityConnectionStringBuilder
构造它只提取较大 EF 连接字符串的 sql 连接字符串部分)。
我通过 .NET 连接到 sql Server 的用户是 sysadmin 角色的成员,所以我认为这不是权限问题。任何人的任何想法?
private static void BackupDatabase(string dbname)
{
try
{
var efcb = new EntityConnectionStringBuilder(Core.WPMMasterConnectionString);
using (var conn = new sqlConnection(efcb.ProviderConnectionString))
{
conn.open();
using (var cmd = new sqlCommand("dbo.usp_backup_database",conn))
{
cmd.Parameters.Add(new sqlParameter("@dbname",dbname));
cmd.ExecuteNonQuery();
}
}
}
catch (sqlException sqlex)
{
displayUtils.ShowLine(sqlex);
}
catch (Exception ex)
{
displayUtils.ShowLine(ex);
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)