你目前正处于脱机状态,正在等待 Internet 重新连接

当您从早期 SQL Server 安装 SQL Server 2008 中或在 SQL Server 2008 R2 中使用公共语言运行库功能的运行的应用程序、 脚本,或功能时,您会收到一条错误消息:"出现了.net 框架错误"

注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。

点击这里察看该文章的英文版: 955629
症状
当您从早期 Microsoft SQL Server 安装使用公共语言运行库 (CLR) 功能的运行应用程序、 一个脚本或一个功能时升级到 Microsoft SQL Server 2008 或 Microsoft SQL Server 2008 R2 后,您会收到类似于以下错误消息的错误消息:
消息 6522,级别 16 状态 1,第 1 行

在执行用户定义的例程或聚合 routine name 的过程中发生了.net 框架错误:

System.InvalidOperationException: 在此上下文中不允许数据访问。 上下文是一个函数或方法不标记为 DataAccessKind.Read 或 SystemDataAccessKind.Read、 从 FillRow 方法的表值函数获取数据的回调或是 UDT 的验证方法。

System.InvalidOperationException
例如对于在下列情况下可能会出现此问题。

方案 1

您使用具有以下特征的方法:
  • 此方法使用 CLR 用户定义的函数、 用户定义类型 (UDT) 的方法或用户定义的聚合,即执行模拟。
  • 此方法使用一个大型对象 (LOB) 作为参数。
  • 该方法不在方法上使用 DataAccesKind.Read 属性。

方案 2

在执行模拟一个 CLR 表值函数中使用 INIT 方法。

方案 3

在执行模拟一个 CLR 表值函数中使用 FillRow 方法。
原因
出现此问题是由于数据库引擎功能和 SQL Server 2008 R2 SQL Server 2008 中的更改。
替代方法
若要解决此问题,如"症状"部分中的方案中所述,使用下列方法之一。

方法 1: 要解决此问题在情况 1 和方案 2 中

要变通解决此问题,将 DataAccessKind.Read 属性添加到方法。

方法 2: 要解决此问题在方案 3

要变通解决此问题,请执行以下操作:
  • 删除模拟从 FillRow 方法。
  • 不要使用 FillRow 方法访问外部资源。
  • 只能通过使用表值函数的 INIT 方法的访问外部资源。
参考
有关 DataAccessKind.Read 属性和其他 CLR 例程的自定义属性的信息,请访问以下 Microsoft TechNet 网站:有关数据库引擎功能在 SQL Server 2008 年中的重大更改,请访问以下 Microsoft TechNet 网站:
SQL Server 2008 数据库引擎 sqlserver2008 sqlserver2k8 sqlsvr2008 sqlsvr2k8 SQL2008RelNoteDatabaseEngine

警告:本文已自动翻译

属性

文章 ID:955629 - 上次审阅时间:03/19/2009 22:27:18 - 修订版本: 2.1

Microsoft SQL Server 2008 Developer, Microsoft SQL Server 2008 Enterprise, Microsoft SQL Server 2008 Express, Microsoft SQL Server 2008 Express with Advanced Services, Microsoft SQL Server 2008 Standard, Microsoft SQL Server 2008 Web, Microsoft SQL Server 2008 Workgroup, Microsoft SQL Server 2008 R2 Datacenter, Microsoft SQL Server 2008 R2 Developer, Microsoft SQL Server 2008 R2 Enterprise, Microsoft SQL Server 2008 R2 Express, Microsoft SQL Server 2008 R2 Express with Advanced Services, Microsoft SQL Server 2008 R2 Standard, Microsoft SQL Server 2008 R2 Standard Edition for Small Business, Microsoft SQL Server 2008 R2 Workgroup

  • kbmt sql2008relnotedatabaseengine sql2008relnote kbprogramming kbautomation kberrmsg kbtshoot kbexpertiseinter kbprb KB955629 KbMtzh
反馈