Иметь команду SQL с FOR XML, которая возвращает один длинный XML как SqlString. Моя проблема заключается в чтении длинной строки XML в .NET C #.
Далее читаются только первые 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 - это правильный XML из оператора TSQL, который мне нужен как строка.
Как я могу прочитать полный 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 обеспечивает то, что мне нужно, и быстро. Я попробовал обычный запрос, а затем сгенерировал XML с использованием Xdocument, но производительность ужасна даже с более чем 100 строками, так как для поиска To требуется поиск по sID. Я думаю, я мог бы написать конкатенацию как функцию SQL, чтобы избежать FOR XML AUTO, но этот запрос с FOR XML быстрый и дает точные результаты, которые мне нужны. Это просто как получить результат?