【问题标题】:Convert SQL Server XML data type to string connecting via OleDb将 SQL Server XML 数据类型转换为通过 OleDb 连接的字符串
【发布时间】:2013-09-26 20:32:21
【问题描述】:

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

我尝试了ExecuteScalarSqlDataAdapterSqlDataReaderDataTable。都给我相同的结果。

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

我在 SSIS 中使用 c# 脚本任务。虽然这应该无关紧要。

【问题讨论】:

  • 你试过SELECT CAST(XMLFIELD AS NVARCHAR(2048)) AS XMLFIELD FROM TABLE吗?
  • 来自数据库表还是 C# 中的数据表?我无法更改数据库中的查询。虽然我想我可以在 C# 中使用我的数据表中的选择。虽然我不确定语法。
  • 也许如果你展示一些代码,你为什么不能改变查询就很明显了。
  • “没关系”,但它代码味道。这种设计选择是否有原因?
  • 它是一个存储过程。我只能调用它,不能修改它,并因此取回 XML 数据类型。如果我尝试上述任何一种方法来获取该列,我所能得到的就是 System.Byte[]。

标签: c# xml sql-server-2008 ssis


【解决方案1】:

如果我理解您的设计,您就有一个脚本组件作为数据流的来源。您有一些查询正在拉回 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。对于 2005+ 系统,TSQL 等效数据类型为 nvarchar(max)

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

【讨论】:

    猜你喜欢
    • 2020-04-07
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-24
    相关资源
    最近更新 更多