在我的SSIS包(SQL Server 2012)中,我使用执行SQL任务在对象变量中设置存储过程结果集。我使用的连接管理器具有以下连接字符串:
Data Source=localhost;Initial Catalog=<myCatalog>;Provider=SQLNCLI11;Integrated Security=SSPI;Auto Translate=False;
我的商店程序输出是一个包含 DateTimeOffset 列和 Time(3)列的结果集。 执行SQL任务成功执行。 然后我有一个脚本任务,其中我以这种方式使用执行SQL任务设置的对象变量:
OleDbDataAdapter da = new OleDbDataAdapter();
DataTable dt = new DataTable();
// Extract the data from the object variable into the table
da.Fill(dt, Dts.Variables["User::ResultsetObj"].Value);
当我执行包时,我收到此错误:
ERROR: OleDbDataAdapter internal error: invalid row set accessor: Ordinal=20 Status=UNSUPPORTEDCONVERSION.
默认情况下,脚本任务使用.NET Framework 4。 OleDbAdapter有什么问题?这些数据类型真的不受支持吗?
谢谢。
答案 0 :(得分:1)
快速回答:https://msdn.microsoft.com/en-us/library/cc668759%28v=vs.110%29.aspx - &gt;真的不受支持。
我使用SqlClient进行了一次小测试(在VS中):
someDataTable = New DataTable()
someDataTable.Load(connection.NewCommand("SELECT SYSDATETIMEOFFSET()").ExecuteReader)
?someDataTable.Rows(0).Item(0)
{03.07.2015 17:24:27 +02:00}
System.DateTimeOffset: {03.07.2015 17:24:27 +02:00}
也许您可以尝试不使用 OleDbDataAdapter 转换数据,但使用 IDTReader DataTable 。
答案 1 :(得分:0)
我删除了执行SQL任务和OleDb连接管理器。 然后我以这种方式在Script Task中使用了SQL Client:
string connStr = "Data Source=localhost;Initial Catalog=myDatabase;Integrated Security=SSPI;";
DataTable dt = new DataTable();
using (SqlConnection sqlConnection = new SqlConnection(connStr))
{
sqlConnection.Open();
SqlCommand cmdExtendedProperies = new SqlCommand("EXEC myProcedure", sqlConnection);
SqlDataReader reader = cmdExtendedProperies.ExecuteReader();
dt.Load(reader);
}
一切正常。