有没有办法强制Microsoft.Jet.OLEDB获取date在Excel中的MM / DD / YYYY格式的列?

从Excel表格读取DateColumns时遇到问题。

有时候人们使用不同的date格式,这会带来一个问题。 让我们说,当我期望07/26/2010从Excel列我得到26-Jul-2010因为用户已更改其date格式。

我使用Microsoft.Jet.OLEDB将xls表读入DataTable

我可以以某种方式强制OleDb阅读器无论在XLS上设置DateFormat,将所有date转换为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(); } 

build议您不必循环访问数据集。 你可以通过在你的查询中指定你想要的格式,让你的查询为你做所有的格式。
一个例子如下:

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

只要您使用JET OLEDB或Ace OLEDB数据提供程序,就能保证工作。 我不能保证它会与其他数据提供商一起工作,但您随时可以查看。

循环访问数据集。 对于每个date,将其转换为date(如果单元格已被修改为文本),然后将date格式化为“MM / DD / YYYY”forms的string。

以下代码是一个启动的例子:

 string date1 = "07/26/2010"; string date2 = "26-Jul-2010"; DateTime dt1 = Convert.ToDateTime(date1); DateTime dt2 = Convert.ToDateTime(date2); string date1B = dt1.ToString("MM/DD/YYYY"); string date2B = dt2.ToString("MM/DD/YYYY"); 

date1B和date2B将是相等的,并且是你所希望的格式。

有一些来回转换正在进行,这是因为您需要validation用户input,因为它来自Excel,并且用户很容易input不符合您数据库模型的数据。

如果input的date本身不是有效的date,将所有内容放在Try-Catch块中将是一个好主意。