1

我有一个 18 列的 excel 表。其中 5 列具有相同的列名CALL_REASON。但是当我使用 Microsoft.ACE.OLEDB.12.0 将该 Excel 表加载到数据集中时。对于具有相同名称的列,数据集中的列名称会更改。它被加载为CALL_REASON,CALL_REASON1,CALL_REASON2,CALL_REASON3,CALL_REASON4. 它们在 excelsheet 中显示为CALL_REASON,CALL_REASON,CALL_REASON,CALL_REASON,CALL_REASON

String properties = "Excel 8.0; HDR=YES; IMEX=1;";//properties set for connection to excel
string sSourceConstr = @"Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\uploads\" + fileName + ";Extended Properties=\"" + properties + "\"";

sSourceConnection = new OleDbConnection(sSourceConstr);//creating the OLEDB connection
try
{
    //select statement to select data from the first excel sheet
    string sql = string.Format("Select * FROM [{0}]", "Sheet1$");

    //commands to fill the dataset with excel data
    OleDbDataAdapter excelAdapter = new OleDbDataAdapter();
    OleDbCommand command = new OleDbCommand(sql, sSourceConnection);
    sSourceConnection.Open();
    excelAdapter.SelectCommand = command;
    excelAdapter.Fill(surveyItemDetails, "ExcelDataTable");
}
4

2 回答 2

1

DataTable 中不能有同名的字段。实际上,您甚至不能拥有CALL_REASONand CALL_reason,例如,请参阅DataColumnCollection.Add 文档中Exceptions的部分:

重复名称异常

该集合已经有一个具有指定名称的列。(比较不区分大小写。)

列名必须唯一的要求非常合理。DataRow.Field<String>("CALL_REASON")如果允许您拥有多个具有该名称的列,应该返回什么?

于 2012-08-02T05:36:33.213 回答
0

Access 可能正在为您更改列名。您可以在数据库中具有相同名称的字段吗?我不这么认为。当您进行选择时,除非它是*,当有许多具有相同名称的字段时,您将如何选择调用原因。尝试使用excel将数据与列导出到CSV文件。然后尝试将 CSV 文件导入 Access。有一个向导可以逐步询问您是否要保留列名、选择一个字段作为键或让 Access 为您创建一个。要追加或创建表等...Access 会告诉您它是否不能使用列名并为您创建一个。

于 2012-08-02T05:25:46.213 回答