C#类型化数据集:OleDBDataAdapter使用Typed DataSet中的列名而不是ExcelSheet

时间:2011-07-08 20:10:19

标签: c# visual-studio-2010 excel dataset oledbdataadapter

我正在使用VS 2010和C#作为Windows窗体应用程序。

我需要将Excel表格中的数据加载到DataSet上。我使用DataSet设计器创建了DataSet,并手动添加了表和列(FirstTable, Column1, Column2)。由于我经常访问列,因此使用类型化数据集而不是使用无类型数据集会更加清晰。

当我使用OleDBDataAdapter并使用Fill on FirstTable填充DataTable时,Column1Column2为空,并且还有两个来自Excel工作表的其他列{{1} }。因此,除非我将相同的Excel列名称提供给(ExcelCol1, ExcelCol2)(如果我将其称为FirstTableColumn1,而不是Column2ExcelCol1),则不会填充我通过设计器创建的DataColumns。

有没有办法告诉DataSet忽略来自Excel的列,只填充已定义的DataColumns?

如果可能,我可以通过DataConnection以某种方式连接Excel工作表来创建DataTables的布局吗?我唯一不确定的是excel文件是用户定义的,因此用户浏览excel文件以填充DataSet。但是所有这些excel文件的列将始终相同。因此,我想使用Typed DataSet预设布局。

1 个答案:

答案 0 :(得分:1)

好的,我想我知道该怎么做。我不确定这是否是最干净的方法,因为我仍然需要手工编写它来分配列名称,即没有简单的方法来忽略Excel列名,但至少我能够使用类型化的数据集

This link描述了表和列映射,基本上是您希望使用自己的列名而不是Excel中的列名。

我想指出一些事情,所以我给出了以下代码。

我们假设created a DataSet via the DataSet designer名为MyDataSet.xsd。它有一个名为FirstTable的表,其中包含Column1列和Column2列。然后,以下代码可用于表映射

MyDataSet myDS = new MyDataset();
//Some query commands using OleDB to get data from Excel
OleDbDataAdapter myAdapter = new OleDbDataAdapter(<OleDbCommand>);
DataTableMapping tableMap = myAdapter.TableMappings.Add("Table", myDS.FirstTable.TableName);
tableMap.ColumnMappings.Add("ExcelCol1", myDS.FirstTable.Column1.ColumnName);
tableMap.ColumnMappings.Add("ExcelCol2", myDS.FirstTable.Column2.ColumnName);
myAdapter.Fill(myDS);
  1. 我意识到当您从Excel文件中读取数据时,然后在DataTableMapping语句中,源名称始终为"Table",即使我的工作表名称/表名在Excel文件中不同。
  2. 要利用类型化数据集,您可以使用myDS.FirstTable.TableName等命令,而不是列名称,而不是

    DataTableMapping tableMap = myAdapter.TableMappings.Add(“Table”,“FirstTable”);

  3. 因此,如果您更改DataSet中的表名或列名,则可以使用VS的重构实用程序。

    我希望这会有所帮助。如果有一个更清洁的解决方案,我将不胜感激任何帮助,但现在这解决了我的问题。