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。而且没有额外的绒毛,除了或包装,直接使用组装好,我现在看到了。