SQL服务器:DLL创建触发器

问题描述:

在Microsoft SQL Server中的错误无法找到组装式,我想调用DLL组件作为触发SQL服务器:DLL创建触发器

这是我的C#代码:

using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace WriteTimeInfile 
{ 
    public class Program 
    { 
     public static void Main(string[] args) 
     { 
      File.AppendAllText(@"C:\Users\Vivien\Desktop\date.txt", 
        DateTime.Now.ToString() + Environment.NewLine); 
     } 
    } 
} 

这是我的属性面板:

enter image description here

然后,我创建SQL Server中的组件,它似乎工作,并创建一个组件:

CREATE ASSEMBLY triggertest 
FROM 'C:\Users\Vivien\Documents\visual studio 2015\Projects\WriteTimeInfile\WriteTimeInfile\bin\Release\WriteTimeInfile.dll' 
WITH PERMISSION_SET = SAFE 

但是,当我试图创建触发器,我试着做就像是在这个link解释说:

CREATE TRIGGER tri_Publishes_clr 
ON STATION 
FOR INSERT 
AS EXTERNAL NAME triggertest.[WriteTimeInfile.WriteTimeInfile.Program].Main 

我得到一个错误

找不到类型“ WriteTimeInfile.WriteTimeInfile.Program'在程序集'WriteTimeInfile'中。

没有什么作品

你能帮助我吗?

+0

检查您的项目设置http://www.codepal.co。uk/show/Could_not_find_type_in_assembly – Serg

+0

它不起作用,但是谢谢你的链接 –

+0

'PERMISSION_SET = SAFE'并且写入文件也不起作用。 –

您没有在.NET代码中创建SQLCLR触发器。此签名:

public static void Main(string[] args) 

适用于控制台应用程序。您需要为SQLCLR对象使用正确的声明,其中包括使用SqlTrigger属性。

[SqlTrigger(Name = "trigger_name", Target = "[schema].[table]", 
      Event = "FOR INSERT, UPDATE, DELETE")] 
public static void TriggerName() 
{ 
} 

有关SQLCLR触发器的更多信息,请参阅MSDN页面CLR Triggers

有关一般使用SQLCLR的更多信息,请参阅我在SQL Server Central上编写的系列(需要免费注册以阅读该站点上的内容):Stairway to SQLCLR


请注意:IF做一个SQLCLR触发器是使用File.AppendAllText的唯一原因,那么你可能会更好创造一个SQLCLR UDF /标量函数做同样的事情,然后使用该功能一个常规的T-SQL触发器。

还有,这是非常重要的,因为你正在做文件系统相关的功能,你的Assembly需要设置为EXTERNAL_ACCESS。请做而不是通过将数据库设置为TRUSTWORTHY ON来完成此操作。请签署大会(使用密码保护它),然后在master中从该大会创建非对称密钥,然后根据该非对称密钥创建登录,然后授予该密钥登录EXTERNAL ACCESS ASSEMBLY。你会在我上面提到的“SQLCLR阶梯”中写的各种文章中看到这种方法。

+0

greate谢谢你!我在等 –