C# 通过OleDb将SQL Server XML数据类型转换为字符串连接

C# 通过OleDb将SQL Server XML数据类型转换为字符串连接,c#,xml,sql-server-2008,ssis,C#,Xml,Sql Server 2008,Ssis,我正在使用OleDbConnection连接到SQL Server 2008数据库。我将返回一列作为XML数据类型。我需要将其转换为标准字符串类型,以便将其存储在字符串变量中。当我调用ToString时,我得到的是System.Byte[]。如果我使用System.Text.Encoding类,我只会得到2个奇数字符 我尝试了ExecuteScalar、SqlDataAdapter、SqlDataReader和DataTable。所有这些都给了我相同的结果 我无法更改连接类型或数据类型 我正在S

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

我尝试了ExecuteScalar、SqlDataAdapter、SqlDataReader和DataTable。所有这些都给了我相同的结果

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


我正在SSIS中使用c脚本任务。尽管这不重要。

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

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

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等效的数据类型是nvarcharmax for 2005+系统


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

您是否尝试过从DB表或C中的datatable中选择CASTXMLFIELD作为NVARCHAR2048作为XMLFIELD?我无法更改数据库中的查询。虽然我想我可以用C从我的数据表中选择一个。虽然我不确定语法。也许如果你展示了一些代码,那么很明显为什么你不能更改查询。这不重要,但这是一种代码味道。选择这种设计有什么原因吗?它是一个存储过程。我只能调用它,不能修改它,并因此返回XML数据类型。如果我尝试以上任何一种方法来获取该列,我只能得到System.Byte[]。