我正在尝试从SSIS中的执行SQL任务调用存储过程。存储过程接受两个表类型变量,我在另一个执行SQL任务中构造并存储在变量的对象类型中。 由于我需要传递对象类型的变量,我使用的是ADO.NET连接管理器。 既然我使用ADO.NET连接管理器,我也无法传递输入参数?在直接输入中标记,我需要编写表达式。 但表达式不支持对象类型变量。 出路是什么?
由于
答案 0 :(得分:0)
您将无法使用本机ADO / OLE源组件。您必须使用脚本组件作为源并使用.NET创建
中的相关位string connectionString = @"Data Source=localhost;Initial Catalog=master;Integrated Security=True";
System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(connectionString);
System.Data.DataTable dataTable = null;
// note that my data table does not have to be the same
// as my UDTT, nor do my columns have to have the same name
// Types-yes. Ordinal, probably so
dataTable = new System.Data.DataTable("Sample");
dataTable.Columns.Add("tweep", System.Type.GetType("System.String"));
dataTable.Columns.Add("have_met", System.Type.GetType("System.Boolean"));
// add rows to my data table but really, this could be any source
dataTable.Rows.Add(new object[] { "billinkc", true });
dataTable.Rows.Add(new object[] { "BrentO", true });
dataTable.Rows.Add(new object[] { "buckwoody", false });
// Hooray for #sqlsat35 and meeting Jen & Sean
dataTable.Rows.Add(new object[] { "MidnightDBA", true });
System.Data.SqlClient.SqlConnection connection = null;
System.Data.DataSet results = null;
System.Data.SqlClient.SqlCommand command = null;
System.Data.SqlClient.SqlDataReader dataReader = null;
connection = new System.Data.SqlClient.SqlConnection(connectionString);
try
{
connection.Open();
command = new System.Data.SqlClient.SqlCommand("TwitterAdd");
command.CommandType = System.Data.CommandType.StoredProcedure;
command.Connection = connection;
// Assigning a table valued parameter looks much like any other parameter
System.Data.SqlClient.SqlParameter tvp = command.Parameters.AddWithValue("@tvp", dataTable);
// this is the only special sauce (not required but helpful)
tvp.SqlDbType = System.Data.SqlDbType.Structured;
tvp.TypeName = "dbo.CONTRIVED_EXAMPLE";
dataReader = command.ExecuteReader();
if (dataReader.HasRows)
{
// pseudo logic here
while(dataReader.Read())
{
MyBuffer.AddRow();
MyBuffer.Col1 = dataReader["Col1"].ToString();
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex);
}