C# 从 DataSet 中获取数据
C# retrieving data from DataSet
我从一个简单的 DataTable 开始,我在其中写入了一个 XML 文件。下次程序运行时,我想检查一下 XML 文件是否存在,然后读取它。
看起来写 xml 没问题,而且我相信读它也没问题,但是我从中读取后似乎无法获取 DataSet 中的任何数据..
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
}
我收到这个错误。
An unhandled exception of type 'System.IndexOutOfRangeException' occurred in System.Data.dll
Additional information: Cannot find column 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:\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
所以,我认为问题不在这里。
问题出在你写
的时候
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
}
是否可能是 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", "", "", "");
我从一个简单的 DataTable 开始,我在其中写入了一个 XML 文件。下次程序运行时,我想检查一下 XML 文件是否存在,然后读取它。
看起来写 xml 没问题,而且我相信读它也没问题,但是我从中读取后似乎无法获取 DataSet 中的任何数据..
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
}
我收到这个错误。
An unhandled exception of type 'System.IndexOutOfRangeException' occurred in System.Data.dll
Additional information: Cannot find column 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:\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
所以,我认为问题不在这里。
问题出在你写
的时候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
}
是否可能是 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", "", "", "");