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)
您不必按照建议遍历数据集。通过在查询中指定所需的格式,可以让查询为您完成所有格式设置。
示例如下:
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数据提供程序,就可以保证此方法有效。我不能保证它可以与其他数据提供程序一起使用,但是您可以随时检查。