Có một lệnh SQL với FOR XML trả về một XML dài là SqlString. Vấn đề của tôi là đọc chuỗi XML dài vào .NET C#.Đọc chuỗi XML lớn từ TSQL FOR XML Statement trong C# .NET
Sau đây chỉ đọc 2033 ký tự đầu tiên
SqlDataReader rdr = command.ExecuteReader();
if (rdr.HasRows)
{
rdr.Read();
Debug.WriteLine(rdr[0].ToString().Length.ToString());
}
Tôi cũng đã cố gắng command.ExecuteScalar và rdr.GetString và vẫn chỉ nhận được 2033 ký tự đầu tiên. Tôi đã thay đổi loại và nó vẫn cắt ngắn vào năm 2033 vì vậy nó không có khả năng gây ra bởi một nhân vật xấu. Đã cố gắng rdr.GetSqlXml và nhận được một thông báo lỗi không thể đúc SqlString để SqlCachedBuffer.
Nếu tôi giới hạn SQL trả về ít hơn 2033 ký tự, tôi nhận được XML hoàn chỉnh hợp lệ. Vì vậy, tôi không nghĩ rằng đó là một vấn đề phân tích cú pháp XML thay vì chỉ là một sự cắt xén. Tôi không cần bất kỳ phân tích cú pháp XML nào - đó là XML hợp lệ từ câu lệnh TSQL mà tôi cần làm chuỗi.
Làm cách nào để đọc toàn bộ XML (dưới dạng văn bản)?
TSQL hoạt động.
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 cung cấp những gì tôi cần và nhanh chóng. Tôi đã thử một truy vấn thường xuyên và sau đó tạo ra XML bằng cách sử dụng Xdocument nhưng hiệu suất là khủng khiếp với thậm chí nhiều hơn 100 dòng như nó cần phải tìm kiếm trên sID để thêm vào. Tôi đoán tôi có thể viết nối như một hàm SQL để tránh FOR XML AUTO nhưng truy vấn đó với FOR XML là nhanh và cung cấp kết quả chính xác mà tôi cần. Nó chỉ là làm thế nào để lấy kết quả?
Bạn có chắc chắn SQL trả về dữ liệu có đúng không? – gbn
Sử dụng ExecuteXmlReader: http://support.microsoft.com/kb/310378 –
Ngoài ra, điều này về cơ bản giống như: http://stackoverflow.com/questions/5423980/how-do-i-return-xml-from -a-lưu-thủ tục –