我正在编写一个CLR存储过程,以字符串的形式获取XML数据,然后使用数据执行某些命令等。
我遇到的问题是,每当我尝试发送超过4000个字符的XML时,我都会收到错误,因为XmlDocument对象无法加载XML,因为很多关闭标记都丢失了,由于文字在4000个字符之后被截断。
我认为这个问题归结为将字符串参数映射到nvarchar(4000)的CLR存储过程,当我认为像nvarchar(max)或ntext这样的东西将是我需要的东西。
不幸的是,我找不到从.NET类型到ntext的映射,字符串类型自动转到nvarchar(max)。
有谁知道我的问题的解决方案?
感谢您的帮助
答案 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)。