【问题标题】:C# Typed DataSets: OleDBDataAdapter use the column names from the Typed DataSet and not ExcelSheetC# Typed DataSets:OleDBDataAdapter 使用 Typed DataSet 中的列名,而不是 ExcelSheet
【发布时间】:2011-10-01 13:52:02
【问题描述】:

我将 VS 2010 与 C# 一起用于 Windows 窗体应用程序。

我需要将 Excel 工作表中的数据加载到数据集上。我使用数据集设计器创建了数据集,并手动添加了表和列(FirstTable, Column1, Column2)。由于我经常访问这些列,因此使用类型化数据集而不是使用非类型化数据集的代码会更简洁。

当我使用 OleDBDataAdapter 并在 FirstTable 上使用 Fill 填充 DataTable 时,Column1Column2 为空,并且 Excel 表 (ExcelCol1, ExcelCol2) 中还有两列。因此,除非我给FirstTable 提供了相同的excel 列名称(而不是Column1Column2,如果我称它为ExcelCol1ExcelCol2),它不会填充我通过设计器创建的DataColumns。

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

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

【问题讨论】:

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


    【解决方案1】:

    好的,我想我知道该怎么做了。我不确定这是否是最干净的方法,因为我仍然必须对其进行手动编码以分配列名,即没有简单的方法可以忽略 Excel 列名,但至少我能够使用类型化的数据集.

    This link @介绍了表和列映射,基本上是当您想使用自己的列名而不是来自Excel的列名。

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

    假设我有created a DataSet via the DataSet designer 称为MyDataSet.xsd。它有一个名为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 语句中,源名称始终为 "Table",即使 Excel 文件中的工作表名称/表格名称不同。
    2. 要利用类型化数据集,您可以使用myDS.FirstTable.TableName 之类的命令,对列名使用相同的命令,而不是,

      databablemapping tablemap = myadapter.tablemappings.add(“表”,“FirstTable”);

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-09
      • 2010-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多