1

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

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

System.Data.SqlClient.SqlInternalConnectionSmi.ValidateConnectionForExecute(SqlCommand 命令)
...

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

4

1 回答 1

2

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

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

于 2018-04-18T15:44:28.390 回答