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);
}
}
}
这是我的属性面板:
然后,我创建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'中。
没有什么作品
你能帮助我吗?
您没有在.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阶梯”中写的各种文章中看到这种方法。
greate谢谢你!我在等 –
检查您的项目设置http://www.codepal.co。uk/show/Could_not_find_type_in_assembly – Serg
它不起作用,但是谢谢你的链接 –
'PERMISSION_SET = SAFE'并且写入文件也不起作用。 –