使用OleDbDataAdapter读取时间错误(c#)

时间:2012-09-11 11:35:02

标签: c# excel datetime oledbconnection

我有一个excel(xlsx 2010)文档,其中只包含两列,一列用于DateTime,另一列用于表格的值:

DateTime                Value
01/09/2012 00:00:00     1.23456
02/09/2012 00:05:00     1.23457
03/09/2012 00:10:00     1.23458
04/09/2012 00:15:00     1.23459

日期时间列设置为自定义格式(dd / mm / yyyy hh:mm:ss),所有时间都是5分钟或10分钟标记,秒数始终为00。

但是,当我使用以下内容阅读本文时:

connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=Excel 12.0;", filePath);
OleDbCommand sqlComm = new OleDbCommand("SELECT * FROM [Sheet1$]", new OleDbConnection(connectionString));
OleDbDataReader r = sqlComm.ExecuteReader();

前两个DateTimes被正确读取,但是在所有DateTimes比文件实际包含的内容少一秒之后,例如:

00:15:00    00:14:59
00:20:00    00:19:59

有谁知道为什么?或者我可以做些什么来纠正它,没有手动检查它们并且四舍五入到最近的分钟(在这种情况下是一个可行的选择 - 我认为)

PS。为了简洁起见,我已经剪切并粘贴了相关的代码行,因此上面的代码示例可能在技术上不起作用,但在真实的应用程序中它确实读取了文件

1 个答案:

答案 0 :(得分:0)

将评论转换为答案

经过重大改进和陡峭的学习曲线后,我可以确认使用互操作库正确读取文件。

根据网络上的其他帖子,参见下面的示例代码

object misValue = System.Reflection.Missing.Value;
// COMM creates a wrapper for each object and they don't get cleaned up.  Never use 2 dots with comm
Excel.ApplicationClass xlApp = new Excel.ApplicationClass();
Excel.Workbooks xlWorkbooks = xlApp.Workbooks;
Excel.Workbook xlWorkbook  = xlWorkbooks.Open(fileInfo.getFileURL(), misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue);
Excel.Worksheet xlWorksheet = (Excel.Worksheet)xlWorkbook.Sheets[1];
Excel.Range xlRange, r;

try
{
    xlRange = (Excel.Range)xlWorksheet.UsedRange;

    int rowCount = xlRange.Rows.Count;
    int colCount = xlRange.Columns.Count;

    for (int col = 0; col < colCount; col++)
    {
        r = (Excel.Range)xlRange.Cells[fileInfo.columnHeaders, (col + 1)];
    }
}