有没有办法强制Microsoft.Jet.OLEDB从Excel获取MM/DD/YYYY格式的日期列?

pen*_*ake 6 c# oledb excel date oledbdatareader

我在从Excel工作表中读取DateColumns时遇到问题.

有时人们会使用不同的日期格式,这会带来问题.假设我07/26/2010从Excel列中得到的结果26-Jul-2010是因为用户已更改其日期格式.

我用它Microsoft.Jet.OLEDB来读取xls表格DataTable.

我可以以某种方式强制OleDb读取器,无论在XLS上设置DateFormat,将所有日期转换为MM/DD/YYYY格式?

我用这段代码来读取Excel文件:

string strConn;
strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;" +
          "Data Source=" + uploadedFileInfo.FullName + ";" +
          @"Extended Properties=""Excel 8.0;HDR=NO;""";


using (OleDbConnection connToExcel = new OleDbConnection(strConn))
{
    //You must use the $ after the object you reference in the spreadsheet
    connToExcel.Open();

    string firstSheetName = ExcelUploadedFileReaderBuilder
                            .GetFirstExcelSheetName(connToExcel);

    OleDbDataAdapter myCommand 
    = new OleDbDataAdapter(String.Format("SELECT * FROM [{0}]", firstSheetName), connToExcel);

    DataSet myDataSet = new DataSet();

    myCommand.Fill(myDataSet, "uploadedExcelTable");

    DataTable dtUploadedExcel = myDataSet.Tables["uploadedExcelTable"];

    lineCount = GetLineNumberWhereNULLRowOccured(dtUploadedExcel) + 1;

    connToExcel.Close();
}
Run Code Online (Sandbox Code Playgroud)

Ale*_*fie 5

您不必按照建议遍历数据集。通过在查询中指定所需的格式,可以让查询为您完成所有格式设置。
示例如下:

OleDbDataAdapter myCommand = 
  new OleDbDataAdapter("SELECT FORMAT([DateCol], 'MM/dd/yyyy') as [DateCol] FROM [SheetName]", connToExcel);
Run Code Online (Sandbox Code Playgroud)

只要您使用的是JET OLEDB或Ace OLEDB数据提供程序,就可以保证此方法有效。我不能保证它可以与其他数据提供程序一起使用,但是您可以随时检查。