使用FOR XML返回一個單一長XML作爲SqlString的SQL命令。我的問題是將長長的XML字符串讀入.NET C#中。從C#.NET中的TSQL FOR XML語句中讀取大型XML字符串
下只讀取第一個字符2033
SqlDataReader rdr = command.ExecuteReader();
if (rdr.HasRows)
{
rdr.Read();
Debug.WriteLine(rdr[0].ToString().Length.ToString());
}
我也試過command.ExecuteScalar和rdr.GetString,仍然只獲得第2033個字符。我已經改變了排序,它仍然在2033截斷,所以它不可能由壞字符引起。試過rdr.GetSqlXml並得到一個錯誤消息,不能將SqlString強制轉換爲SqlCachedBuffer。
如果我限制SQL返回少於2033個字符,我會得到完整的有效XML。所以我不認爲這是一個XML解析問題,而只是一個截斷。我不需要任何XML解析 - 它是我需要作爲字符串的TSQL語句中的有效XML。
如何讀取完整的XML(如文本)?
TSQL的工作原理。
select top 10 docSVsys.sID, docSVsys.docID
, (select top 10 value + '; '
from docMVtext with (nolock) where docMVtext.sID = docSVsys.sID
and docMVtext.fieldID = '113'
order by value FOR XML PATH('')) as [To]
from docSVsys with (nolock)
order by docSVsys.sID
for xml auto, root('documents')
FOR XML PATH提供了我需要的和快速的。我嘗試了一個常規查詢,然後使用Xdocument生成XML,但性能很差,甚至超過100行,因爲它需要在sID上搜索以添加To。我想我可以將連接編寫爲SQL函數以避免FOR XML AUTO,但使用FOR XML的查詢很快並提供了我所需的確切結果。這只是如何檢索結果?
確定的SQL返回正確的數據? – gbn
使用ExecuteXmlReader:http://support.microsoft.com/kb/310378 –
此外,這基本上是相同的:http://stackoverflow.com/questions/5423980/how-do-i-return-xml-from -a-stored-procedure –