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();
这个我也没成功。