XML в строку из вызова базы данных — MVC

#c# #sql-server #asp.net-mvc #asp.net-mvc-5

#c# #sql-сервер #asp.net-mvc #asp.net-mvc-5

Вопрос:

Я пытаюсь переработать найденный здесь подход, чтобы вызвать хранимую процедуру с SQL Server, получить XML-ответ, отобразить ответ в строковую переменную и обработать его по шаблону XLST. Кажется, я не могу правильно создать строковую переменную. Вот что я делаю в своем контроллере:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Data.SqlClient;
using System.Configuration;
using Demo2.Models;

namespace Demo2.Controllers
{
public class CfsController : Controller
{
    // GET: Cfs

    
    public ActionResult Report()
    {
        {
            SqlConnection con = new SqlConnection("data source=.; database=Test; integrated security=SSPI");
            SqlCommand cmd = new SqlCommand("EXEC [TEST].[REPORTSERV].[CFSREPORT] @CFSNUMBER = N'010101-10';", con);
            con.Open();
            SqlDataReader rdr = cmd.ExecuteReader();
            string response = rdr.ToString();
            con.Close();

            ViewBag.CurrentReport = response;

            return View();
        }
    }
}
}
 

Когда я запускаю код, я получаю сообщение об ошибке на шаге преобразования на tranformObj.Transform(reader, args, writer) шаге вспомогательного CS.

Я полагаю, что проблема вызвана тем, что переменная string response не принимает XML-ответ от SQL-сервера в виде строки.

Комментарии:

1. Пожалуйста, отредактируйте свой вопрос и добавьте `[TEST]. [СЛУЖБА ОТЧЕТОВ]. [CFSREPORT]’ исходный код хранимой процедуры.

2. rdr.ToString() не делает того, что вы думаете. Вы также должны утилизировать свои объекты connection и reader и правильно использовать параметры с объектами SqlParameter

Ответ №1:

Поскольку моя хранимая процедура будет возвращать только одну запись (XML-ответ), я изменил ExecuteReader на ExecuteScalar и преобразовал ответ в строку. Теперь это работает, но похоже, что некоторые из возвращаемых мне XML-файлов превышают размер строковой переменной.

  string rdr = cmd.ExecuteScalar().ToString();
       
 ViewBag.CurrentReport = rdr;
 

Ответ №2:

Вы никогда не предоставляли свой исходный код SP… Таким образом, предполагается, что он возвращает тип данных XML.

Вам нужно изменить следующие две строки:

 SqlDataReader rdr = cmd.ExecuteReader();
string response = rdr.ToString();
 

К следующему:

 using (XmlReader reader = cmd.ExecuteXmlReader())
{
   XDocument xdoc = XDocument.Load(reader);
   string response = xdoc.ToString();
}