【问题标题】:CLR Trigger Deploy ErrorCLR 触发器部署错误
【发布时间】:2017-07-09 23:05:39
【问题描述】:

我正在尝试部署一个 CLR 触发器,该触发器链接到包含我编写的库的外部 .dll 文件。现在我只想能够在本地数据库上测试代码。我已将本地数据库设置为 Trustworthy = True 并且外部程序集访问我的用户名。我还添加了对我尝试使用的外部库的引用,但是当我调用该函数时出现此错误

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  

任何帮助将不胜感激。我现在知道我这样做的方式是不安全的,现在这只是一个概念证明。构建库 .dll 时我做错了什么吗?

【问题讨论】:

  • 您可以使用create assembly 语句将该程序集添加到您的数据库中吗?
  • 事实证明这将是唯一的解决方案,但由于该项目包含 12 个左右的外部 dll,因此添加它们会很痛苦,并且网络管理员不想将数据库更改为不安全代码。因此,解决方法是创建我想在 c# 项目中执行的所有代码并将其编译成 .exe,然后从触发器运行该 .exe。 c# 项目只会从外部连接到数据库。

标签: c# sql-server clr


【解决方案1】:

我认为您在 clr 项目中使用了第 3 方 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

然后将你的第三方 dll 上传到 sql server 目录

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

【讨论】:

    猜你喜欢
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-04
    • 2021-05-14
    • 2015-06-07
    • 2022-11-10
    • 1970-01-01
    相关资源
    最近更新 更多