gpt4 book ai didi

c# - SSIS 只读变量被更改

转载 作者:太空狗 更新时间:2023-10-30 01:13:44 24 4
gpt4 key购买 nike

我有一个包,里面有两个组件:第一个是执行并获取 ADO 结果集的 SQL 任务,第二个是脚本任务,我将结果集转换为 System.Data。 DataTable 两次,类似这样的东西:

 System.Data.DataTable t1= new System.Data.DataTable();
OleDbDataAdapter adp = new OleDbDataAdapter();
adp.Fill(t1, Dts.Variables["ResultSet"].Value);

System.Data.DataTable t2= new System.Data.DataTable();
OleDbDataAdapter adp2 = new OleDbDataAdapter();
adp2.Fill(t2, Dts.Variables["ResultSet"].Value);

结果是 t1 正确填充,但 t2 仍然为空;更重要的是,我已经明确地将[User::ResultSet]设置为一个只读变量,看起来这个变量刚刚变空了,即使我稍后再添加一个脚本任务并再次做同样的事情,填充的 DataTable 仍然是空的。

有很多方法可以规避我的案例,所以我不希望这里有解决方案。但我想弄清楚这些事情:OleDbDataAdapter.Fill 是否对原始数据集有副作用,我的只读变量如何更改其值?

最佳答案

我不认为这会改变只读记录集变量值,问题是当使用 Adapter.Fill 方法用记录集填充数据表时,记录集仍处于打开状态,您必须明确关闭它才能能够再次与其他适配器一起使用。 (当您再次尝试读取它时,它已完成提供行,因此您正尝试从末尾读取)

来自以下 Microsoft 文章:

CAUTION When using ADO Recordset or Record objects in conjunction with .NET Framework applications, always call Close when you are finished. This ensures that the underlying connection to a data source is released in a timely manner, and also prevents possible access violations due to unmanaged ADO objects being reclaimed by garbage collection when existing references still exist.

Note that the OleDbDataAdapter.Fill overload that takes a DataSet and an ADO object implicitly calls Close on the ADO object when the Fill operation is complete. You need to explicitly close the ADO Recordset or Record object after calling the OleDbDataAdapter.Fill overload that takes a DataTable.

我并没有真正找到如何在使用 Fill 方法后关闭 SSIS 记录集,但我找到了一个类似问题的链接和解决方法:

关于c# - SSIS 只读变量被更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48437092/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com