0

我正在使用OleDbConnection. 我将一列作为XML数据类型返回。我需要将其转换为标准字符串类型,以便将其存储在字符串变量中。当我打电话时,ToString()我得到的只是System.Byte[]. 如果我使用这个System.Text.Encoding类,我得到的只是 2 个奇数字符。

我尝试过ExecuteScalar, SqlDataAdapter,SqlDataReaderDataTable. 所有人都给我相同的结果。

我无法更改连接类型或数据类型。

我在 SSIS 中使用 ac# Script Task。虽然这应该无关紧要。

4

1 回答 1

0

如果我理解您的设计,您就有一个脚本组件作为数据流的来源。您有一些查询正在拉回 xml 数据类型。除非您有理由使用脚本组件源,否则请省去元数据管理的麻烦并使用OLE DB Source组件

使用以下查询来模拟您的输入

SELECT
    CAST(D.le_xml AS xml) AS le_xml
FROM
(    
    SELECT
        Element.name
    FROM
        sys.all_columns AS Element
    FOR   
        XML AUTO, ELEMENTS
) D (le_xml);

这会生成一些 XML。缩写版本看起来像我的数据库。

<Element>
  <name>CostCenterCD</name>
</Element>
<Element>
  <name>CostCenterKEY</name>
</Element>

这使我得到一个像

在此处输入图像描述

来自 OLE DB 源的元数据是DT_NTEXT. TSQL 等效数据类型nvarchar(max)适用于 2005+ 系统。

如果您知道 XML 会很小,则可以使用派生列将其转换为非 LOB 字符串。如果您不想要 Unicode,我发现在一个派生列中将 DT_NTEXT 转为 DT_TEXT,然后将 DT_TEXT 转为 DT_STR 会更好。否则,您的转换路线是 DT_NTEXT 到 DT_WSTR,但该列的上限为 4k 字节。

于 2013-09-26T21:20:56.543 回答