C#Typed DataSets:OleDBDataAdapter使用Typed DataSet中的列名而不使用ExcelSheet

我正在使用VS 2010与C#的Windows窗体应用程序。

我需要将我的数据从Excel工作表加载到DataSet。 我使用DataSetdevise器创build了DataSet,并手动添加了表和列(FirstTable, Column1, Column2) 。 由于我访问的列很多,代码会更清晰,有一个types的数据集,而不是使用无types的数据集。

当我使用OleDBDataAdapter并使用填充FirstTable填充DataTable时, Column1Column2是空的,并且还有两个来自Excel工作表(ExcelCol1, ExcelCol2)附加列。 所以,除非我给了FirstTable (而不是Column1Column2如果我把它称为ExcelCol1ExcelCol2 )相同的Excel列名称,它不会填充通过devise器创build的DataColumns。

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

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

好吧,我想我想出了如何做到这一点。 我不确定这是否是最干净的方法,因为我仍然需要手工编写代码来分配列名称,即没有简单的方法来忽略Excel列名,但至less我可以使用types化的数据集。

这个链接描述了表格和列的映射,基本上当你想使用自己的列名而不是从Excel的列名。

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

我们假设我已经通过名为MyDataSet.xsd 的DataSetdevise器创build了一个DataSet 。 它有一个名为FirstTable的表,列Column1Column2 。 然后下面的代码可以用于表映射

 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语句中,即使我的sheetname / tablename在Excel文件上不同,源名称始终为"Table"
  2. 要利用Typed Dataset,可以使用像myDS.FirstTable.TableName这样的命令,而对列名称使用相同的命令,

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

所以如果你改变DataSet中的表或列名,你可以使用VS的重构工具。

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