C#从DataSet中检索数据

时间:2015-11-13 03:09:48

标签: c# xml datatable dataset readxml

我已经开始使用一个简单的DataTable,我已经写入了一个XML文件。在下次程序运行时,我想检查XML文件是否退出并读取它。

看起来写xml很好,我相信读它很好,但是在我读完之后我似乎无法获得DataSet中的任何数据..

 <?xml version="1.0" standalone="yes"?>
<NewDataSet>
    <Table1>
        <Name>Test1</Name>
        <Version>1.1.1.1</Version>
        <Code />
        <Location>C:\Computers\test.txt</Location>
    </Table1>
    <Table1>
        <Name>test2</Name>
        <Version />
        <Code />
        <Location />
    </Table1>
    <Table1>
        <Name>test3</Name>
        <Version />
        <Code />
        <Location />
    </Table1>
</NewDataSet>        

我收到此错误。

  

未处理的类型&#39; System.IndexOutOfRangeException&#39;发生在System.Data.dll

中      

其他信息:找不到第1列。

在这里查看我的XML文件

{{1}}

我只是试图获得&#34;姓名&#34;从每一行开始,我做错了什么?

3 个答案:

答案 0 :(得分:0)

我将您的XML放入C:\ computer 并运行代码

DataSet ds =new DataSet();

if (File.Exists(@"C:\Computers\config.xml"))
{
            ds.ReadXml(@"C:\Computers\config.xml");

            //comboBox.Items.Add(ds.Tables[0].Rows[0][0].ToString()); doesn't work
            comboBox.Items.Add(ds.Tables[0].Rows.Count);  //this counts 3 rows
}

comboBox.Items.Add(ds.Tables [0] .Rows [0] [0] .ToString()是Tesy1 ds.Tables [0] .Rows.Count是3

所以,我认为问题不在这里。

答案 1 :(得分:0)

问题出在你写

的时候
ds.WriteXml(@"C:\Computers\config.xml");

在第一行中它会写一个新文件,因此当你读到它时,里面没有数据。所以现在你应该删除第一行,然后检查它应该运行正常

if (File.Exists(@"C:\Computers\config.xml"))
{
    ds.ReadXml(@"C:\Computers\config.xml");
    comboBox.Items.Add(ds.Tables[0].Rows[0][0].ToString()); //doesn't work
    comboBox.Items.Add(ds.Tables[0].Rows.Count);  //this counts 3 rows
}

答案 2 :(得分:0)

DataTable是否可能无法正确构建?

            public DataTable predefinedPatch = new DataTable();

            predefinedPatch.Columns.Add("Name");
            predefinedPatch.Columns.Add("Version");
            predefinedPatch.Columns.Add("Code");
            predefinedPatch.Columns.Add("Location");
            //
            predefinedPatch.Rows.Add("test1", "", "", "");
            predefinedPatch.Rows.Add("test2", "", "", "");
            predefinedPatch.Rows.Add("test3", "", "", "");