Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# &引用;已经有一个打开的DataReader与此命令关联,必须先关闭该命令";在远程SSI中_C#_Sql Server_Ssis - Fatal编程技术网

C# &引用;已经有一个打开的DataReader与此命令关联,必须先关闭该命令";在远程SSI中

C# &引用;已经有一个打开的DataReader与此命令关联,必须先关闭该命令";在远程SSI中,c#,sql-server,ssis,C#,Sql Server,Ssis,我非常熟悉MultipleActiveResultSets,但不幸的是,这一次还不够 我试图在C#中远程运行并行一个SSIS包,希望我将MARS添加到connectionstring中,但它不会阻止SSIS.Catalogs[catalog].executionIdentifier]要生成众所周知的命令,已经有一个与此命令相关联的打开的DataReader,必须先将其关闭。随机 var package = ssis.Catalogs[catalog]?.Folders[folder]?.Proj

我非常熟悉
MultipleActiveResultSets
,但不幸的是,这一次还不够

我试图在C#中远程运行并行一个SSIS包,希望我将MARS添加到connectionstring中,但它不会阻止
SSIS.Catalogs[catalog].executionIdentifier]
要生成众所周知的
命令,已经有一个与此命令相关联的打开的DataReader,必须先将其关闭。
随机

var package = ssis.Catalogs[catalog]?.Folders[folder]?.Projects[project]?.Packages[packagename];
if(package != null)
{
    var tasks = new List<Task>();
    for(int i = 0; i < 6; i++)
    {
        var task = new Task(() =>
        {
            var parameters = new Collection<PackageInfo.ExecutionValueParameterSet>
            {
                new PackageInfo.ExecutionValueParameterSet { ParameterName = "Success", ParameterValue = true, ObjectType = (short)SSISParameterLevel.Package },
                new PackageInfo.ExecutionValueParameterSet { ParameterName = "LOGGING_LEVEL", ParameterValue = 3, ObjectType = (short)SSISParameterLevel.System }
            };

            var executionIdentifier = package.Execute(false, null, parameters);

            ExecutionOperation execution = null;
            try
            {
                // this one fails
                execution = ssis.Catalogs[catalog].Executions[executionIdentifier];
                do
                {
                    // if previous was failing, this one can fails as well
                    execution.Refresh();
                    Thread.Sleep(2000);
                }
                while (!execution.Completed);
            }catch(InvalidOperationException ex)
            {
              //### getting randomly 'There is already an open DataReader ....'
            }
            Trace.TraceInformation($"{executionIdentifier}\t{execution.Status}");
        }
        );

        tasks.Add(task);
        task.Start();
    }

    Task.WaitAll(tasks.ToArray());
    Console.WriteLine("all completed");
}
var package=ssis.Catalogs[catalog]?.Folders[folder]?.Projects[project]?.package[packagename];
if(包!=null)
{
var tasks=新列表();
对于(int i=0;i<6;i++)
{
变量任务=新任务(()=>
{
var参数=新集合
{
新建PackageInfo.ExecutionValueParameterSet{ParameterName=“Success”,ParameterValue=true,ObjectType=(短)ssiParameterLevel.Package},
新的PackageInfo.ExecutionValueParameterSet{ParameterName=“LOGGING_LEVEL”,ParameterValue=3,ObjectType=(短)SSISParameterLevel.System}
};
var executionIdentifier=package.Execute(false,null,parameters);
ExecutionOperation执行=null;
尝试
{
//这个失败了
execution=ssis.Catalogs[catalog].Executions[executionIdentifier];
做
{
//如果前一个失败了,那么这个也会失败
execution.Refresh();
《睡眠》(2000年);
}
而(!execution.Completed);
}捕获(无效操作异常ex)
{
//###随机获取“已经有一个开放的DataReader…”
}
Trace.TraceInformation($“{executionIdentifier}\t{execution.Status}”);
}
);
任务。添加(任务);
task.Start();
}
Task.WaitAll(tasks.ToArray());
Console.WriteLine(“全部完成”);
}


我怀疑
MARS
没有真正传输到
IntegrationService
实例。有没有其他方法来强制执行这种行为?或者,我应该回过头来查询自己的一些数据库,以跟踪SSIS包的进度和完成状态吗?

您的连接/数据上下文是如何定义的,它是一个类的属性,您是否用using包装它?在上面的屏幕截图中,您可以看到using。而且没有额外的绒毛,除了或包装,直接使用组装好,我现在看到了。