2012-08-03 64 views
1

我遇到了用c#編寫的我的clr存儲過程的大量問題。我已經成功安裝了程序集,但是當我調用存儲過程時,出現以下錯誤: -SQLCLR和Microsoft.SqlServer.Management.Smo.Server..ctor()

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) 

這是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'; 

任何一個有爲什麼它不工作的任何想法執行?

感謝

安德魯

+0

爲什麼要爲「RESTORE DATABASE」T-SQL命令添加非標準替換? – 2012-08-03 12:35:58

+0

,因爲我們的房地產有大約100分貝的文件(公司日誌),我們需要恢復開發的場合,所以我想寫一個clr循環通過備份中的這些數據庫文件並將它們移到恢復的新位置。而smo課程提供者爲此提供了完美的libls,因此clr。我現在發現了一種不同的方法 - 我堅持使用clr,但刪除了smo類,並使用內聯sql,即使用SqlConnection和SqlCommand和SqlDataAdapters \ DataSets進行「RESTORE FILESIONLY」,以便通過文件循環 - 完美實現, – 2012-08-03 13:21:17

+0

i dynmically生成恢復語句並將其與連接的sql字符串中的「WITH MOVE」一起傳遞給sql。 – 2012-08-03 13:21:24

回答

0

因爲 「這個功能在SQLCLR禁用」。 SMO框架檢測到您處於SQL CLR並拒絕工作。造成這種情況的原因可能是微軟花費巨資使其全部工作,這是一個合理的原因。

爲什麼不從客戶端程序恢復數據庫,就像消息提示的那樣?