【问题标题】:C# retrieving data from DataSetC# 从数据集中检索数据
【发布时间】:2016-02-14 14:18:14
【问题描述】:

我从一个简单的 DataTable 开始,我在其中写入了一个 XML 文件。下次程序运行时,我想检查一下XML文件是否存在,并读取它。

看起来写 xml 很好,我相信阅读它也很好,但是在读取数据集后我似乎无法获取数据集中的任何数据..

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
}

我收到此错误。

System.Data.dll 中出现“System.IndexOutOfRangeException”类型的未处理异常

附加信息:找不到第 1 列。

看看我的 XML 文件

 <?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>        
      

我只是想从每一行中获取“名称”字段,我做错了什么?

【问题讨论】:

  • 在您的 XML 文件中是 C:\ &lt;?xml version 正确或 &lt;?xml version
  • 只是
  • 我没有得到你得到的错误...

标签: c# xml datatable dataset readxml


【解决方案1】:

我把你的 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

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

【讨论】:

  • 对,计数工作正常,但如果我使用注释掉的代码,我似乎无法获得实际值“Test1”“Test2”或“Test3”
  • 弄清楚了,这是我的数据集的范围,无论出于何种原因,我都将它放在主窗口的顶部。更改对象的范围解决了我的问题。不完全确定为什么它不喜欢呆在原地,但无论如何。
【解决方案2】:

问题出在你写的时候

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
}

【讨论】:

  • ds.WriteXml(@"C:\Computers\config.xml");仅在 Window closed 事件中,我只是在上面包含了它,所以人们知道我正在编写该特定路径的文件
  • 尝试调试。在 ReadXML 上放置一个断点,当您的光标到达那里时,请检查文件。有没有要读的东西。我相信你会得到线索...... bcoz 代码运行良好。
  • 我的 DataTable 结构可能不正确吗?我在下面发布了它的样子
【解决方案3】:

是否可能 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", "", "", "");

【讨论】:

  • 因为您是 SO 新手。您可以随时编辑您的问题,而不是将其作为答案。
  • 我相信当您将其写入 XML 文件时,您可以查看其结构是否与您在问题中显示的方式相同。如果是这样,那就是正确的。如果不让我们知道您的 XML 是什么样的
  • 知道了,谢谢。这是对象的范围,我将它作为 MainWindow 顶部的公共数据集,它在编写 xml 时没有问题,但我猜它在读取它时有问题。
猜你喜欢
  • 2013-08-06
  • 1970-01-01
  • 1970-01-01
  • 2018-08-11
  • 2011-08-22
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 2016-01-29
相关资源
最近更新 更多