转换DateTimeOffset和Time数据类型时,OleDbDataAdapter的UNSUPPORTEDCONVERSION内部错误

时间:2015-07-03 12:54:29

标签: .net sql-server ssis oledb

在我的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有什么问题?这些数据类型真的不受支持吗?

谢谢。

2 个答案:

答案 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);
}

一切正常。