【问题标题】:Specify MultipleActiveResultSets in SQL CLR Trigger在 SQL CLR 触发器中指定 MultipleActiveResultSets
【发布时间】:2018-09-28 22:23:41
【问题描述】:

我有一个 SQL CLR 触发器,其中包含许多 SqlDataReader 调用(除其他外),在生产系统中,用户会遇到类似的错误

在执行用户定义的例程或聚合“MyTrigger”期间发生 .NET Framework 错误:
System.InvalidOperationException:已经有一个打开的 DataReader 与此命令关联,必须先关闭。
System.InvalidOperationException:
在
System.Data.SqlClient.SqlInternalConnectionSmi.ValidateConnectionForExecute(SqlCommand 命令)
...

但是我无法在我的测试环境中重现这一点。我正在考虑设置MutltipleActiveResultSets=true,但当然没有要在CLR触发器中定义的连接字符串(或者是否存在......) - 所以可以在这里某处将MARS设置为true,还是我需要继续寻找替代解决方案?

【问题讨论】:

    标签: c# .net triggers sqlclr sql-server-mars


    【解决方案1】:

    如果你指定进程内上下文连接,那么不,你不能启用 MARS。此限制已记录在案。

    如果您想要/需要 MARS 连接,则需要使用常规/外部连接。这需要将程序集设置为EXTERNAL_ACCESS。这也意味着您没有在“进行中”工作,因此无法访问正在执行触发器的会话。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-29
      • 2015-06-07
      • 2017-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多