我有以下存储过程:
CREATE Procedure [dbo].[usp_GetMyAlbumData]
AS
SELECT *
FROM [dbo].[tblAlbumDetails]
FOR XML PATH('AlbumDetail'), ROOT('AlbumDetails'), TYPE
,我需要弄清楚如何使用usp_ReportGetMyAlbumData
生成的XML在datagridview中显示数据。
例如,我的数据库中有一条记录。当我在SQL Server 2012中运行usp_ReportGetMyAlbumData
存储过程时,得到以下结果:
<AlbumDetails>
<AlbumDetail>
<MusicID>1</MusicID>
<AlbumDesc>Jones</AlbumDesc>
<AlbumDate>2018-10-13T15:55:49.843</AlbumDate>
<AlbumPrice>4.0000</AlbumPrice>
</AlbumDetail>
</AlbumDetails>
我想使用C#将此XML结果(或usp_ReportGetMyAlbumData
产生的任何其他XML结果)写入DataSet,以便可以将其绑定到DataGridView。
我知道如何write XML files to a Dataset,但是存储过程返回XML,而不是XML 文件。
我需要编写什么代码来使用存储过程生成的XML数据填充数据集?
答案 0 :(得分:2)
xml将是数据库中的字符串。因此,我将使用xml linq parse方法将字符串放入数据表中。然后使数据表成为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;
}
}
}
答案 1 :(得分:1)
string xml = "your xml here";
var ds = new DataSet();
using (var reader = new StringReader(xml))
{
ds.ReadXml(reader);
}
dataGridView.DataSource = ds.Tables[0];