经过进一步的研究和反复试验,我找到了解决方案。我在这里提到的文章说
您的程序集必须使用Permission_set = external_access创建
说起来容易做起来难,但这是一个很好的起点。只需使用该行代替permission_set = safe就会出现错误:
为程序集“ assemblyName”创建组件失败,因为程序集“ assemblyName”未获得PERMISSION_SET =
EXTERNAL_ACCESS的授权。如果满足以下任一条件,则对程序集进行授权:数据库所有者(DBO)具有EXTERNAL ACCESS
ASSEMBLY权限,并且数据库具有TRUSTWORTHY数据库属性。或用具有相应登录名并具有EXTERNAL ACCESS
ASSEMBLY权限的相应证书或非对称密钥对程序集进行签名。
因此,我要做的第一件事是对我的dll文件进行签名。为此,请在Visual Studio
2010中转到项目属性的“签名”选项卡,然后选中“对程序集进行签名”并为其命名。对于此示例,名称为MyDllKey。我选择不使用密码保护它。然后,当然,我将dll文件复制到了sql
server:C: Temp
使用此页面作为参考,我使用以下3个命令基于上述键创建了SQL登录名:
CREATE ASYMMETRIC KEY MyDllKey FROM EXECUTABLE FILE = 'C:TempMyDll.dll'CREATE LOGIN MyDllLogin FROM ASYMMETRIC KEY MyDllKeyGRANT EXTERNAL ACCESS ASSEMBLY TO MyDllLogin
如上创建登录名后,我现在可以使用以下命令创建程序集:
CREATE ASSEMBLY [MyDll]FROM 'C:TempMyDll.dll'WITH PERMISSION_SET = EXTERNAL_ACCESS
现在剩下要做的就是使用正确的连接字符串。显然不能
enlist=false与结合使用
connection=true。这是我使用的连接字符串的示例。
string connStr = @"data source=serverNameinstanceName;initial catalog=DBName;integrated security=SSPI;enlist=false";
而且有效!



