Использование хранимой процедуры Для XML Path читать непосредственно в DataSet, связанный с DataGridView? - PullRequest
0 голосов
/ 14 октября 2018

У меня есть следующая хранимая процедура:

CREATE Procedure [dbo].[usp_GetMyAlbumData]  
AS
    SELECT * 
    FROM [dbo].[tblAlbumDetails]  
    FOR XML PATH('AlbumDetail'), ROOT('AlbumDetails'), TYPE

, и мне нужно выяснить, как использовать XML, созданный usp_ReportGetMyAlbumData, для отображения данных в виде таблицы данных.

Например, у меня есть одна запись в моей базе данных.Когда я запускаю хранимую процедуру usp_ReportGetMyAlbumData в SQL Server 2012, я получаю следующие результаты:

<AlbumDetails>
  <AlbumDetail>
    <MusicID>1</MusicID>
    <AlbumDesc>Jones</AlbumDesc>
    <AlbumDate>2018-10-13T15:55:49.843</AlbumDate>
    <AlbumPrice>4.0000</AlbumPrice>
  </AlbumDetail>
</AlbumDetails>

Я хотел бы использовать C # для записи этого результата XML (или любых других результатов XML, полученных с помощью usp_ReportGetMyAlbumData) к DataSet, чтобы я мог связать его с DataGridView.

Я знаю, как записывать XML-файлы в набор данных , но хранимая процедура возвращает XML, а не XML файл .

Какой код использовать?нужно написать, чтобы заполнить набор данных данными в XML, созданными хранимой процедурой?

Ответы [ 2 ]

0 голосов
/ 15 октября 2018
string xml = "your xml here";
var ds = new DataSet();

using (var reader = new StringReader(xml))
{
    ds.ReadXml(reader);
}

dataGridView.DataSource = ds.Tables[0];
0 голосов
/ 15 октября 2018

xml будет строкой из базы данных.Поэтому я бы использовал метод синтаксического анализа xml linq, чтобы получить строку пут в таблицу данных.Затем сделайте datatable источником DGV.Смотрите код ниже

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using System.Xml.Linq;
using System.IO;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        const string FILENAME = @"c:\temp\test.xml";
        public Form1()
        {
            InitializeComponent();

            //data will be from the database a string
            //I'm reading fron a file for testing
            string xml = File.ReadAllText(FILENAME);

            DataTable dt = new DataTable();
            dt.Columns.Add("MusicID", typeof(int));
            dt.Columns.Add("AlbumDesc", typeof(string));
            dt.Columns.Add("AlbumDate", typeof(DateTime));
            dt.Columns.Add("AlbumPrice", typeof(decimal));

            XDocument doc = XDocument.Parse(xml);

            foreach(XElement album in doc.Descendants("AlbumDetail"))
            {
                dt.Rows.Add(new object[] {
                    (int)album.Element("MusicID"),
                    (string)album.Element("AlbumDesc"),
                    (DateTime)album.Element("AlbumDate"),
                    (decimal)album.Element("AlbumPrice")
                });
            }

            dataGridView1.DataSource = dt;

        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...