2017-02-20 61 views
0

我试图部署一个CLR触发器,该触发器链接到包含我编写的库的外部.dll文件。现在我只想测试本地数据库上的代码。我已经将本地数据库设置为Trustworthy = True,并且可以通过外部程序集访问我的用户名。我也加入到我试图使用外部库的引用,但是当我调用该函数我得到这个错误CLR触发器部署错误

Severity Code Description Project File Line Suppression State 
Error  SQL72014: .Net SqlClient Data Provider: Msg 6503, Level 16, 
State 12, Line 1 Assembly 'googlecalendersync, version=1.0.0.0, 
culture=neutral, publickeytoken=fab9d21c96557bef.' was not found in the SQL 
catalog. Test3 C:\Users\dwd002\Documents\Visual Studio 
2015\Projects\Test3\Test3\bin\Debug\Test3.sql 52 

任何帮助将大大apreciated。我现在知道,我这样做并不安全,现在它只是一个概念证明。在构建库.dll时,我有什么错误吗?

+0

你可以使用'create assembly'语句将该程序集添加到数据库吗? –

+0

事实证明,这将是唯一的解决方案,但由于该项目由12个左右的外部DLL添加它们将是一个痛苦,网络管理员不希望将数据库更改为不安全的代码。因此,解决方法是创建我想要在c#项目中执行的所有代码,并将其编译为.exe,然后从触发器运行该.exe。 C#项目将从外部连接到数据库。 –

回答

2

我认为你是在你的CLR项目中使用第三方DLL

首先,你需要创建大会从您的第三方DLL

use master 
GO 
CREATE ASYMMETRIC KEY ClrGoogleCalender 
FROM EXECUTABLE FILE='<Your 3rd party dll path>' 
CREATE LOGIN CLRGoogleCalenderLOGIN FROM ASYMMETRIC KEY ClrGoogleCalender 
GRANT UNSAFE ASSEMBLY TO ClrGoogleCalenderLOGIN 
GO 

然后Uplaod您的第三方的DLL的SQL Server目录

[1]: https://i.stack.imgur.com/sBhQZ.png