使用 XML 中的列填充数据集

本文关键字:填充 数据集 XML 使用 | 更新日期: 2023-09-27 18:34:28

这是我到目前为止所拥有的:

public void CreateObject()
{
    const string ServerURl = "http://services.odata.org/northwind/northwind.svc/Customers";
    DataSet ds = new DataSet();
    DataTable sourcetable = new DataTable();
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(ServerURl);
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    richTextBox1.AppendText(response.StatusDescription);
    Stream datastream = response.GetResponseStream();
    StreamReader reader2 = new StreamReader(datastream);
    using (StreamReader mySR = new StreamReader(datastream, Encoding.GetEncoding("iso-8859-1")))
    {
        XmlDocument lgnXml = new XmlDocument();
        lgnXml.Load(mySR);
        XmlNodeReader reader = new XmlNodeReader(lgnXml);
        ds.ReadXml(reader);
        foreach (DataTable table in ds.Tables)
        {
            foreach (DataRow dr in table.Rows)
            {
                sourcetable.Rows.Add(dr.ItemArray);
            }
        }
        dataGridView1.DataSource = sourcetable;
    }
}
private void button1_Click(object sender, EventArgs e)
{
    CreateObject();
}

当我尝试运行它时,出现此错误: 输入数组的长度超过此表中的列数

我猜我必须向数据集或数据表添加列名?我可以从 XML 中执行此操作吗?

编辑这是我使用 codeninja.sj 的方法运行时的响应

+---+-------------------------------------------------------------+----------------------+
|   |                              id                             |       updated        |
+---+-------------------------------------------------------------+----------------------+
| 1 | http://services.odata.org/northwind/northwind.svc/Customers | 2016-02-15T20:21:21Z |
+---+-------------------------------------------------------------+----------------------

使用 XML 中的列填充数据集

方法 1:在创建源数据表时,必须定义列名及其数据类型

DataTable sourcetable = new DataTable();
sourcetable.Columns.Add("id", typeof(int));
sourcetable.Columns.Add("ColumnName1", typeof(string));
sourcetable.Columns.Add("ColumnName2", typeof(string));

方法 2:将 API 响应转换为 XML 对象;并将其转换为数据集

string ServerURl = "http://localhost:53835/api/values";
DataSet ds = new DataSet();            
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(ServerURl);
request.ContentType = "application/xml";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();            
var datastream = response.GetResponseStream();
XmlReader reader = XmlReader.Create(datastream);
ds.ReadXml(reader);
dataGridView1.DataSource = ds.Tables[0]; //ds.Tables["properties"] --> Specify your XML Node Name here

建议:第二种方法比第一种方法更好;因为您可以为不同的 API 响应重复使用相同的代码

注意:根据您的 API 响应修改上述代码片段