c# - 从不同的服务器获取 CLR Procedure 中的数据

标签 c# sql-server database-connection connection-string sqlclr

我有一个 CLR 过程,它打开到服务器的连接,比方说 SERVER2,并获取一些数据,处理它并返回一个表。

[SqlFunction(
   DataAccess = DataAccessKind.Read,
   FillRowMethodName = "List_FillRow",
   TableDefinition = "Date datetime, Quantity int")]
public static IEnumerable ListCount(...)
{
  using (SqlConnection con = new SqlConnection(connectionStringToSERVER2))
  { ... }
  return list;
}

此 CLR 过程是从在 SERVER1 上运行的 SQL 存储过程运行的。

CREATE PROCEDURE [dbo].[sp_Reports_NumaraSpalariJetWash]
BEGIN
    DECLARE curs CURSOR
    LOCAL STATIC READ_ONLY FORWARD_ONLY
    FOR   

    SELECT ...

    OPEN curs  

    FETCH NEXT FROM curs   
    INTO ...;

    WHILE @@FETCH_STATUS = 0  
    BEGIN

        INSERT INTO ...
                    (...)
        SELECT Date, Quantity
        FROM            dbo.ListCount(...)

        FETCH NEXT FROM curs   
        INTO ...;
    END
END

我收到错误:"System.Data.SqlClient.SqlException: Transaction context in use by another session." 在结果窗口中,此错误出现多次,我猜每次循环 FETCH 一次.

最佳答案

执行 INSERT...SELECT 应该导致系统生成的事务将 INSERTSELECT 作为原子操作绑定(bind)在一起.从 .NET 4.0 或 4.5 开始,SqlConnection 的默认行为是 EnlistTrue 而它默认为 False 在 .NET Framework 的早期版本中。当 EnlistTrue 时,新连接将尝试加入现有事务。

尝试将 Enlist=False; 添加到连接字符串。

有关一般使用 SQLCLR 的更多信息,请访问 SQLCLR.org .

关于c# - 从不同的服务器获取 CLR Procedure 中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50451195/

相关文章:

c# - 试着抓。以相同的方式处理多个异常(或失败)

c# - asp mvc 到 spring mvc

Sql Server 2008 快速递归查询

SQL JSON - 从数组中获取特定值

c# - 在 map 上显示圆圈会显示拉长的椭圆形

php - 检查mysql连接是否有效

linux - apache tomcat 在 linux 中抛出 : no ocijdbc11 in java. library.path

c# - 单例 NServiceBus Saga

c# - 创建我的第一个 HttpHandler - 不起作用

vb.net - 使用 DataContext 类和 SqlConnection 之间有什么区别?