Хорошо, думаю, я понял, как это сделать. Я не уверен, что это самый чистый способ сделать это, поскольку мне все еще приходится вручную кодировать его, чтобы назначать имена столбцов, т.е. нет простого способа игнорировать имена столбцов Excel, но по крайней мере я могу использовать типизированные наборы данных .
Эта ссылка описывает сопоставления таблиц и столбцов, которые в основном используются в тех случаях, когда вы хотите использовать собственные имена столбцов вместо имен из Excel.
Я хотел бы указать на несколько вещей, поэтому я дал следующий код.
Давайте предположим, что создал DataSet через конструктор DataSet с именем 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);
- Я понял, что когда вы читаете данные из файла Excel, то в операторе DataTableMapping имя источника всегда равно
"Table"
, хотя мое имя листа / таблицы в файле Excel отличается.
Чтобы воспользоваться набором типизированных данных, вы можете использовать такие команды, как myDS.FirstTable.TableName
и такие же для имен столбцов вместо
DataTableMapping tableMap = myAdapter.TableMappings.Add ("Table", "FirstTable");
Таким образом, если вы измените имена таблиц или столбцов в DataSet, вы можете использовать утилиты рефакторинга VS.
Надеюсь, это поможет. Если есть более чистое решение, я был бы признателен за любую помощь, но сейчас это решило мою проблему.