无法加载文件或程序集...或其依赖项之一。来自HRESULT的异常:0x80FC3C2C

时间:2011-03-24 16:12:41

标签: .net sql-server clr sqlclr

异常消息:无法加载文件或程序集System.DirectoryServices或其依赖项之一。来自HRESULT的异常:0x80FC3C2C

从CLR SQL过程引发的异常。从程序集中的方法引发的异常,其中初始化System.DirectoryServices中的一个类,并且程序集使用该程序集与CLR过程。

环境:

  1. MS SQL Server 2005 Std。
  2. .NET framework 2.0
  3. 创建程序集的数据库将参数TRUSTWORTHY设置为ON
  4. 使用PERMISSION_SET = UNSAFE
  5. 创建的装配

4 个答案:

答案 0 :(得分:0)

请记住,这个答案来自我在培训课程中的笔记......您必须将PERMISSION_SET设置为EXTERNAL_ACCESS才能访问服务器的文件系统或访问其他服务器。这是有道理的,因为您使用System.DirectoryServices访问另一个服务器(域控制器)。

答案 1 :(得分:0)

我认为SQL Server内部不支持System.DirectoryServices程序集。 SQL Server仅允许使用非常具体(硬编码)的程序集列表(SQL Server 2005SQL 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]