异常消息:无法加载文件或程序集System.DirectoryServices或其依赖项之一。来自HRESULT的异常:0x80FC3C2C
从CLR SQL过程引发的异常。从程序集中的方法引发的异常,其中初始化System.DirectoryServices中的一个类,并且程序集使用该程序集与CLR过程。
环境:
答案 0 :(得分:0)
请记住,这个答案来自我在培训课程中的笔记......您必须将PERMISSION_SET设置为EXTERNAL_ACCESS才能访问服务器的文件系统或访问其他服务器。这是有道理的,因为您使用System.DirectoryServices访问另一个服务器(域控制器)。
答案 1 :(得分:0)
我认为SQL Server内部不支持System.DirectoryServices程序集。 SQL Server仅允许使用非常具体(硬编码)的程序集列表(SQL Server 2005,SQL Server 2008),以免危及其稳定性。
话虽如此,似乎有办法实现它,无论如何看到question/answer(尚未尝试过)。
答案 2 :(得分:0)
最后,我找到了解决方法。我将System.DirectoryServices的引用添加到链接到MS SQL的程序集,并在CLR过程代码中从此命名空间创建一个类。因此,从放置DS主代码的类中可以看到System.DirectoryServices程序集。
答案 3 :(得分:0)
就我而言,问题与数据库的所有者有关。
当您遇到此错误时,这种情况也经常发生。 恢复数据库后,它可能有助于修复主数据库中的数据库所有者:
--Update db owner in master database
DECLARE @Command VARCHAR(MAX) = 'ALTER AUTHORIZATION ON DATABASE::[<<DatabaseName>>] TO
[<<LoginName>>]'
SELECT @Command = REPLACE(REPLACE(@Command
, '<<DatabaseName>>', SD.Name)
, '<<LoginName>>', SL.Name)
FROM master..sysdatabases SD
JOIN master..syslogins SL ON SD.SID = SL.SID
WHERE SD.Name = DB_NAME()
PRINT @Command
EXEC(@Command)
如果这没有帮助,请尝试以下操作:
ALTER AUTHORIZATION ON DATABASE::[YourDatabaseName] TO [sa]