ODBC驱动程序无法读取Excel中添加的行

时间:2017-05-17 09:19:03

标签: c# sql sql-server excel odbc

我使用ODBC(xls/xlsx)从C#创建Provider=Microsoft.ACE.OLEDB.12.0文件。结果表有4行(例如)。我用Excel打开文件,添加第5行并保存文件。当尝试使用SELECT * FROM [table]从C#over ODBC读取它时,我只得到没有第5行的原始4行。似乎ODBC在XLS文件中的某个位置存储行数,后来只读取它们而没有从Excel或LibreOffice输入的新数据。这是已知问题,我能解决吗?如果我在Excel中创建新的电子表格,则所有行都从C#读取。

编辑:我发现了一些有用的信息。首次从C#/ ODBC创建XLS文件时,有2个表(表)。如果表名是TABLE,DataTable sheets = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null)将包含sheets.Rows[0] ==" TABLE"和sheets.Rows[1] ==" TABLE $"。 Excel将只显示一张表" TABLE"。编辑后,更改(第5行)仅存在于" TABLE $"片材。

2 个答案:

答案 0 :(得分:0)

如果是,您是否按代码添加第5行,是否可以分享您用于执行相同操作的代码行。您的代码中可能存在以下问题。

  1. 保存提交未正确完成。
  2. 在阅读文件连接之前,刷新未完成。

答案 1 :(得分:-1)

我想我发现了这个问题。似乎Excel创建的内部电子表格名称具有" $"最后的标志。 ODBC生成的工作表名称是CREATE TABLE中给出的确切字符串。另一方面,Excel(和LibreOffice)仅为TABLETABLE$工作表显示一个工作表。如果我在Excel中编辑表格,保存后更改仅在TABLE$中。另一张TABLE未更改。当我执行SELECT * FROM [TABLE]时,结果来自原始ODBC生成的表,而不更改Excel。现在我枚举XLS文件中的可用工作表,如果第一个工作表名称不以" $"和床单超过1,我添加" $"到第一个工作表名称并打开正确的表。我想ODBC连接字符串可能包含使用" $" -ending表...的选项...