首页 > 解决方案 > 将数据从 Oracle 移动到 Sybase - 字符串问题

问题描述

在我们的 DTS 包中,我们将数据从 Oracle 列VARCHAR2(50 CHAR)(Unicode) 复制到 Sybase 列VARCHAR(50)(Nonunicode)。来源是 Oracle DB,我们从 sql 查询中选择数据。

下一个是数据转换,我们将数据转换为STRING[DT_STR] 50(CODE PAGE 1250)。最后是插入到 Sybase 表列的数据Varchar(50)。但运行后我们只看到空列,没有原始值。

错误可能在哪里?


更新 1

如果我SELECT @@VERSION在 Sybase 服务器上执行,我会得到以下信息:

Adaptive Server Enterprise/15.7/EBF 21520 SMP SP102 /P/ia64/HP-UX B.11.31/ase157sp101/3445/64-bit/FBO/2013 年 7 月 13 日星期六 05:47:31

我正在使用 OLEDB Provider 连接到 Sybase 目标

标签: oraclessisoledbetlsybase

解决方案


使用 ADO.Net 而不是 OLEDB

根据您的评论,您似乎正在使用 OLEDB Provider 连接到 Sybase。连接到 Sybase 的首选方法是使用 ADO.Net 提供程序而不是 OLEDB。

Sybase OLEDB 提供程序问题

通过网络上的小搜索,您可以意识到 Sybase OLEDB 提供程序在 SSIS 中使用时可能会导致几个问题,例如:

Sybase ADO.NET

ADO.Net 是从 SSIS 连接到 sybase 的正确方法。

在以下官方文档中,他们提到:

Adaptive Server ADO.NET 数据提供程序可以集成到 SQL Server 集成服务 (SSIS) 中,从而允许对 ADO.NET 数据提供程序功能进行本机访问。
通过集成,您可以将 Adaptive Server 用作:

  • ADO.NET 连接管理器
  • ADO.NET 源数据流组件
  • ADO.NET 目标数据流组件

同样在官方下载页面中,他们没有提到 OLEDB 提供程序,但他们提到了 ADO.NET

使用 Sybase ADO.Net 数据提供程序的分步指南

您可以查看以下链接:


解决方法

如果 ADO.Net 不起作用,请检查该问题是否不是由 Sybase 目标中不支持的某些 unicode 字符引起的。

尝试添加脚本组件,添加类型为 Output 的列DT_STR,然后使用以下代码:

Row.outColumn = Encoding.GetEncoding("Windows-1250").GetString(Encoding.GetEncoding("Windows-1250").GetBytes(Row.inColumn))

并映射outColumn到目的地。


推荐阅读