在SQL CLR触发器

时间:2018-04-18 15:36:29

标签: c# .net triggers sqlclr mars

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

  

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

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

1 个答案:

答案 0 :(得分:1)

如果指定进程内上下文连接,则为no,则无法启用MARS。记录了这一限制。

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