ExecuteXmlReader 只返回 2033 个字符的三种解决办法

作者:vkvi 来源:ITPOW(原创) 日期:2010-6-23

ExecuteXmlReader 只返回 2033 个字符,如果结果多于 2033 个字符,将被截断,造成返回不完整的 xml。

办法一、改变查询语句

比如原有 sql 是:

string sql = "select top 10 * from tbl FOR XML AUTO, ELEMENTS";

应该改用下面的 sql:

string sql = "select top 10 * from tbl FOR XML AUTO, ELEMENTS";
sql = @"declare @xml XML;
        set @xml=(" + sql + @");
        select @xml;"

此法我试了,成功了。

或者,如下也可以:

string sql = "select top 10 * from tbl FOR XML AUTO, ELEMENTS";
sql = @"declare @xml nvarchar(max);
        set @xml=(" + sql + @");
        select @xml;"

nvarchar(max),这里 max 是 SQL Server 2008 的新东西

实际上:这个我在 SQL Server 2008 的 Management Studio 中测试成功了;但 SQL Server 2000 的查询分析器中没有测试成功。所以不行的话,就用原始的方法:http://www.itpow.com/c/2010/06/8UWLHVQNZM259Q1G.asp

办法二、用 BeginExecuteXmlReader 和 EndExecuteXmlReader

改变连接字符串

Data Source=(local);Initial Catalog=db;Integrated Security=true;Asynchronous Processing=true;

用 BeginExecuteXmlReader 和 EndExecuteXmlReader

IAsyncResult result = command.BeginExecuteXmlReader();
while (!result.IsCompleted)
{
    System.Threading.Thread.Sleep(100);
}
XmlReader reader = command.EndExecuteXmlReader(result);

这是微软网站上的方法,但我没成功。

办法三、ReadState

XmlReader reader = command.ExecuteXmlReader();
reader.Read();
while (reader.ReadState != ReadState.EndOfFile)
{
    result += reader.ReadOuterXml();
}
reader.Close();

这个我也没成功。

相关文章