如何解决无法使用 .Net c# 程序中的存储过程备份 SQL Server 数据库,但 ssms 中的相同过程可以正常工作
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 举报,一经查实,本站将立刻删除。