将大量XML传输到CLR存储过程

时间:2008-11-19 15:00:28

标签: stored-procedures clr

我正在编写一个CLR存储过程,以字符串的形式获取XML数据,然后使用数据执行某些命令等。

我遇到的问题是,每当我尝试发送超过4000个字符的XML时,我都会收到错误,因为XmlDocument对象无法加载XML,因为很多关闭标记都丢失了,由于文字在4000个字符之后被截断。

我认为这个问题归结为将字符串参数映射到nvarchar(4000)的CLR存储过程,当我认为像nvarchar(max)或ntext这样的东西将是我需要的东西。

不幸的是,我找不到从.NET类型到ntext的映射,字符串类型自动转到nvarchar(max)。

有谁知道我的问题的解决方案?

感谢您的帮助

3 个答案:

答案 0 :(得分:2)

我认为你想要System.Data.SqlTypes.SqlXml类型。 例如:

using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using System.Xml;

using Microsoft.SqlServer.Server;

public partial class StoredProcedures
{
    [SqlProcedure]
    public static void StoredProcedure1(SqlXml data)
    {
        using (XmlReader reader = data.CreateReader())
        {
            reader.MoveToContent();
            // Do stuff here.
        }
    }
};

答案 1 :(得分:0)

对于CLR存储过程,char,varchar,text,ntext,image,cursor, 用户定义的表类型和表不能指定为参数。

您应该能够使用nvarchar(max)类型而不是ntext类型。

答案 2 :(得分:0)

ntext将在SQL Server的未来版本中消失,因此您应该使用nvarchar(MAX)。