#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();
}