我有一个从SQL进程传递到脚本任务的通用对象。该对象本质上是一个数据表,但为了从sql进程获取完整的结果集,我必须将它存储在一个通用对象中。
所以,如果我有:
Object A = Dts.Variables[0];
然后我将如何提取并操纵其值。
基本上我想做的是:
Object A = Dts.Variables[0];
strin x = A.Column[0].value.tostring();
但这显然不起作用。
答案 0 :(得分:11)
我无法获得上述任何答案,因此下面列出的是我用来加载数据表的代码。 “User :: transactionalRepDBs”是Object(System.Object)的SSIS变量,它是通过执行SQL任务脚本的“完整结果集”加载的。使用的脚本任务是C#。 This link assisted me.
using System.Data.OleDb;
DataTable dt= new DataTable();
OleDbDataAdapter adapter = new OleDbDataAdapter();
adapter.Fill(dt, Dts.Variables["User::transactionalRepDBs"].Value);
String _showMe;
foreach (DataRow row in dt.Rows)
{
//insert what you want to do here
for (int i = 0, _showMe = ""; i < row.ItemArray.Length; i++ )
{
_showMe += row.ItemArray[i].ToString() + " | ";
}
MessageBox.Show("Data row #" + dt.Rows.IndexOf(row).ToString() + " value: " + _showMe);
}
答案 1 :(得分:8)
从Object解析数据表没有任何问题。我已经看到Andy Leonard在他的ETL框架上做了。
你是在正确的道路上,但你没有看到整个画面。此代码将类型为Variable(大约)的对象分配给A.然后,您尝试访问不存在的属性。
Object A = Dts.Variables[0];
您需要获取变量的值。您可以将其作为A
的分配Object A = Dts.Variables[0].Value;
或者,如果您需要对实际变量执行其他操作,则可以保留当前的A代码分配,然后访问Value属性。
Object A = Dts.Variables[0];
DataTable B = (DataTable) A.Value;
DataRow C = B.Row[0];
string x = C.Column[0].ToString();
以上数据表/ datarow代码是近似值。重要的一点就是访问SSIS变量所持有的好东西,你需要访问该对象的值。
答案 2 :(得分:3)
建议#1:按名称访问变量,而不是数字索引。
建议#2:将Value属性的结果转换为您期望的对象类型。
因此:
string myString = (string)Dts.Variables["MyString"].Value;
DataTable myTable = (DataTable)Dts.Variables["MyTable"].Value;
DataTable myOtherTable = Dts.Variables["MyOtherTable"].Value as DataTable;
答案 3 :(得分:1)
很棒的男人,
这完全没问题。
DataTable dt= new DataTable();
OleDbDataAdapter adapter = new OleDbDataAdapter();
adapter.Fill(dt, Dts.Variables["User::transactionalRepDBs"].Value);
答案 4 :(得分:0)
// Works Perfectly fine ....ssis , c#
DataTable dt = new DataTable();
OleDbDataAdapter adapter = new OleDbDataAdapter();
adapter.Fill(dt, Dts.Variables["User::VariableObj"].Value);
foreach (DataColumn cols in dt.Columns)
{
MessageBox.Show("Colum Name = " + cols.ToString());
}
foreach (DataRow row in dt.Rows)
{
MessageBox.Show( "rows ID = " + row[0].ToString() + " rows
Name = " + row[1].ToString());
}