我使用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#读取。
DataTable sheets = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null)
将包含sheets.Rows[0]
==" TABLE"和sheets.Rows[1]
==" TABLE $"。 Excel将只显示一张表" TABLE"。编辑后,更改(第5行)仅存在于" TABLE $"片材。
答案 0 :(得分:0)
如果是,您是否按代码添加第5行,是否可以分享您用于执行相同操作的代码行。您的代码中可能存在以下问题。
答案 1 :(得分:-1)
我想我发现了这个问题。似乎Excel创建的内部电子表格名称具有" $"最后的标志。 ODBC生成的工作表名称是CREATE TABLE
中给出的确切字符串。另一方面,Excel(和LibreOffice)仅为TABLE
和TABLE$
工作表显示一个工作表。如果我在Excel中编辑表格,保存后更改仅在TABLE$
中。另一张TABLE
未更改。当我执行SELECT * FROM [TABLE]
时,结果来自原始ODBC生成的表,而不更改Excel。现在我枚举XLS文件中的可用工作表,如果第一个工作表名称不以" $"和床单超过1,我添加" $"到第一个工作表名称并打开正确的表。我想ODBC连接字符串可能包含使用" $" -ending表...的选项...