我有一个包含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");
}
答案 0 :(得分:1)
DataTable中不能包含具有相同名称的字段。事实上,您甚至无法拥有CALL_REASON
和CALL_reason
,例如,请参阅documentation of DataColumnCollection.Add中的Exceptions
部分:
<强> DuplicateNameException 强>
该集合已有一个具有指定名称的列。 (比较不区分大小写。)
列名必须唯一的要求非常有意义。如果您被允许拥有多个具有该名称的列,那么DataRow.Field<String>("CALL_REASON")
应该返回什么内容?
答案 1 :(得分:0)
Access可能正在为您更改列名。你能在数据库中使用相同名称的字段吗?我不这么认为。当你进行选择时,除非它是*,当有许多具有相同名称的字段时,如何选择调用原因。要实验尝试使用excel将带有列的数据导出到CSV文件。然后尝试将CSV文件导入Access。有一个向导可以逐步询问您是否要保留列名,选择一个字段作为键或让Access为您创建一个。要附加或创建表等... Access将告诉您它是否不能使用列名并为您创建一个。