4

我正在创建一套包,以将数据从我们在 Informix IDS 11.7 上运行的 ERP 系统导入 SQL Server (2012)。

使用 SSIS 导入这些数据我遇到了一个问题。我可以通过 2 种方式访问​​数据,使用 ODBC 连接和 ADO.NET 数据源,或者使用 OLEDB 连接和提供程序。

使用 ODBC 大约慢了 3 倍(保守地说!),所以我自然很想摆脱这种情况。

但是问题是,当我使用 OLEDB 时,数据源报告了错误的数据类型。

服务器上的 NVARCHAR 数据类型将作为 VARCHAR (DT_STR) 报告给 SSIS。这在导入数据时会导致问题,因为任何传入的 unicode 数据都会导致包失败。这里没有机会进行数据转换,当数据到达数据源组件时,包会失败。我可以将组件设置为忽略这些错误,它会运行良好,但缺少数据,这是完全不可接受的。

我尝试在 setnet32 中设置 DB_LOCALE 和 CLIENT_LOCAL,没有任何效果。

当您创建 OLEDB 数据源时,它会抱怨无法找到默认代码页,因此您必须将属性设置为“AlwyasUseDefaultCodePage”以使该警告消失,但设置默认代码页不会似乎实际上改变了它的行为,即使我将代码页设置为 65001 之类的东西,它仍然试图将这些数据作为 VARCHAR 传递。

所以,我的问题是,我怎样才能让 Informix 的 OLEDB 驱动程序正常工作,或者设置/强制 SSIS 认为这个数据实际上是 DT_WSTR,而不是 DT_STR?

谢谢!

4

1 回答 1

2

因此,总结一下完成这项工作所需的步骤(至少为了后代着想)。

设置 OLEDB 连接时,您需要添加 2 个参数 -

RSASWS=TRUE;
UNICODE=TRUE;

这 2 个参数没有显示在连接的 GUI 中,至少在 Informix 4.1 驱动程序中是这样。

要添加这些,您需要修改连接的“ConnectionString”属性,将这两个属性添加到连接字符串的末尾。请注意,每次打开连接 GUI 时都会覆盖此属性。每次进入此界面后,您都需要确保手动修改连接字符串。

设置连接字符串的另一个选项是使用变量(或 SQL 2012 上 SSIS 中的参数),因此自动对连接字符串进行的任何更改都将在运行时更正(它们实际上在使用参数时在设计时得到更正) .

我在此数据源中发现的最后一个警告似乎是用空格填充 nvarchar,就好像它们是 nchar 一样。虽然这可能是我的源数据的问题,但是要检查您是否设置了它,您可能需要添加一个修剪步骤。

于 2013-07-31T03:31:42.763 回答