C# Excel数据列名在使用Microsoft.ACE.OLEDB.12.0加载到数据集中时发生更改
我有一张excel表格,有18列。其中5列具有相同的列名C# Excel数据列名在使用Microsoft.ACE.OLEDB.12.0加载到数据集中时发生更改,c#,excel,ado.net,excel-2007,import-from-excel,C#,Excel,Ado.net,Excel 2007,Import From Excel,我有一张excel表格,有18列。其中5列具有相同的列名调用\u REASON。但是当我使用Microsoft.ACE.OLEDB.12.0将excel工作表加载到数据集中时。对于具有相同名称的列,将更改数据集中的列名。它被加载为CALL\u REASON,CALL\u REASON1,CALL\u REASON2,CALL\u REASON3,CALL\u REASON4。它们在excelsheet中显示为CALL\u REASON,CALL\u REASON,CALL\u REASON,CA
调用\u REASON
。但是当我使用Microsoft.ACE.OLEDB.12.0将excel工作表加载到数据集中时。对于具有相同名称的列,将更改数据集中的列名。它被加载为CALL\u REASON,CALL\u REASON1,CALL\u REASON2,CALL\u REASON3,CALL\u REASON4
。它们在excelsheet中显示为CALL\u REASON,CALL\u REASON,CALL\u REASON,CALL\u REASON,CALL\u 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");
}
Access可能正在为您更改列名。在数据库中可以有同名字段吗?我不这么认为。如果执行select,除非它是*,那么当有许多字段具有相同名称时,如何选择调用原因。要进行实验,请尝试使用excel将包含列的数据导出到CSV文件。然后尝试导入CSV文件以访问。有一个向导会询问您是否要保留列名、选择一个字段作为键或让Access为您创建一个字段。若要追加或创建表等,Access将告诉您是否无法使用列名,并为您创建一个列名 Access可能正在为您更改列名。在数据库中可以有同名字段吗?我不这么认为。如果执行select,除非它是*,那么当有许多字段具有相同名称时,如何选择调用原因。要进行实验,请尝试使用excel将包含列的数据导出到CSV文件。然后尝试导入CSV文件以访问。有一个向导会询问您是否要保留列名、选择一个字段作为键或让Access为您创建一个字段。若要追加或创建表等,Access将告诉您是否无法使用列名,并为您创建一个列名 数据表中不能有同名字段。事实上,您甚至不能有
CALL\u REASON
和CALL\u REASON
,例如,请参见以下内容中的异常部分:
DuplicateNameException
集合已具有具有指定名称的列。(比较不区分大小写。)
列名必须是唯一的要求非常有意义。如果允许多个列使用该名称,那么,DataRow.Field(“CALL_REASON”)
应该返回什么?数据表中不能有同名字段。事实上,您甚至不能有CALL\u REASON
和CALL\u REASON
,例如,请参见以下内容中的异常部分:
DuplicateNameException
集合已具有具有指定名称的列。(比较不区分大小写。)
列名必须是唯一的要求非常有意义。如果允许有多个列使用该名称,那么,DataRow.Field(“CALL\u REASON”)
应该返回什么?可以向我们显示代码,包括SQL查询吗?直觉上这是bydesign
。你能给我们看看代码,包括SQL查询吗?直觉上,这是bydesign
。仅供参考,如果导入Access时未列出字段名,则至少在2007开启时会自动填充字段[#]。仅供参考,如果导入Access时未列出字段名,则至少在2007开启时会自动填充字段[#]。