SQLCLR和Microsoft.SqlServer.Management.Smo.Server..ctor()

时间:2012-08-03 10:46:31

标签: c# sql-server-2008 sqlclr

我在用c#编写的clr存储过程中遇到了大问题。我已经成功安装了程序集,但是当我调用存储过程时,我得到以下错误: -

Msg 6522, Level 16, State 1, Procedure RestoreDatabaseClr, Line 0

A .NET Framework error occurred during execution of user-defined routine or     aggregate "RestoreDatabaseClr": 

System.Exception: This functionality is disabled in the SQLCLR. It is recommended that you execute from your client application.
System.Exception: 
at Microsoft.SqlServer.Management.Common.ConnectionManager..ctor()
at Microsoft.SqlServer.Management.Common.ServerConnection..ctor()
at Microsoft.SqlServer.Management.Smo.ExecutionManager..ctor(String name)
at Microsoft.SqlServer.Management.Smo.Server..ctor()
at DBRestoreClr.StoredProcedures.RestoreDatabaseClr(String backupFile, String dbName, String dataFiles, String logFiles)

这是我试图在sproc中执行的c#代码: -

using System;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using Microsoft.SqlServer.Management.Common;
using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Server;

namespace DBRestoreClr
{
    public partial class StoredProcedures
    {
        [SqlProcedure()]
        public static int RestoreDatabaseClr(string backupFile, string dbName, string dataFiles, string logFiles)
        {
             var sqlServer = new Server();
        }
    }
}

我正在使用以下

执行
EXEC @ReturnValue RestoreDatabaseClr 'C:\Workspace\DEV\DBRestoreDatabase\tests\Clr\restore.bak', 
                            'restore',
                            'C:\2008\MSSQL10.MSSQLSERVER\MSSQL\DATA\restore',
                            'C:\2008\MSSQL10.MSSQLSERVER\MSSQL\DATA\restore\logs';

任何人都有任何想法,为什么它不起作用?

谢谢

安德鲁

1 个答案:

答案 0 :(得分:0)

因为“在SQLCLR中禁用了此功能”。 SMO框架检测到您在SQL CLR中并拒绝工作。其原因可能是微软要将其全部工作代价高昂,这是一个正当理由。

为什么不直接从客户端程序恢复数据库,就像消息所示?