【问题标题】:Backup database from CLR Function从 CLR 功能备份数据库
【发布时间】:2013-10-23 10:31:49
【问题描述】:

我正在尝试使用简单的 CLR 函数来备份 sql 数据库。

[SqlFunction(DataAccess = DataAccessKind.Read)]
public static int BackupDb()
{
    using (var conn = new SqlConnection("context connection=true"))
    {
        conn.Open();
        var cmd = new SqlCommand(
            @"backup database MyDatabase to disk='d:\temp\MyDatabase.bak' WITH INIT, STATS=10", conn);
        cmd.ExecuteNonQuery();
    }
    return 0;
}

但是这段代码给出了异常 消息 6522,第 16 层,状态 1,第 1 行 执行用户定义的例程或聚合“BackupDb”期间发生 .NET Framework 错误: System.Data.SqlClient.SqlException:在函数中无效使用副作用运算符“BACKUP DATABASE”。 System.Data.SqlClient.SqlException: 在 System.Data.SqlClient.SqlConnection.OnError(SqlException 异常,布尔型 breakConnection,Action1 wrapCloseInAction) at System.Data.SqlClient.SqlCommand.RunExecuteNonQuerySmi(Boolean sendToPipe) at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource1 完成,字符串方法名,布尔型 sendToPipe,Int32 超时,布尔型异步写入) 在 System.Data.SqlClient.SqlCommand.ExecuteNonQuery() 在 UserDefinedFunctions.BackupDb()

【问题讨论】:

  • 您不能从函数中更改数据库。就这么简单。并且备份数据库确实会更改该数据库(特别是它如何处理事务日志的部分)
  • 谢谢,我创建了 [SqlProcedure] 而不是函数,现在它工作正常。如果您将此评论写为答案,我会接受。

标签: c# sql-server-2012 clr


【解决方案1】:

您不能在函数内对数据库进行更改。就这么简单。并且备份数据库确实会更改该数据库(特别是它如何处理事务日志的部分)

如果您想要 a) 可以进入 SQL Server,b) 允许您编写 c# 代码,以及 c) 让您对数据库进行更改,则符合该定义的唯一对象是 CLR Stored Procedure

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-04
    • 1970-01-01
    • 2011-11-04
    • 1970-01-01
    • 2011-02-20
    相关资源
    最近更新 更多