“不是合法的OleAutdate”BulkCopy / Excel 2013 – SQL Server

我正在开发一个将Excel导出到SQL Server的应用程序。 我正在使用SqlBulkCopy ,但我面临着这个错误

不是合法的OleAutdate

只是在一些电脑上。 我已经在寻找一个解决scheme,但是很难。 我认为这个问题是因为来自excel的date信息。 我试图在文本上添加一行Excel,并将所有信息上传为文本,但date上载为“#######”。 请有人可以帮我解决这个问题吗?

 Public Shared Sub ImportDataFromExcel_DAL(ByVal excelFilePath As String) 'Select From Excel Dim ExcelDataQuery As String ExcelDataQuery = "SELECT [CustomerPO] ,[Line] ,[Sign Date] FROM [Sheet1$] WHERE [CustomerPO] IS NOT NULL" 'Excel Connection Dim sExcelConnectionString As String = (Convert.ToString("provider=Microsoft.ACE.OLEDB.15.0;data source=") & excelFilePath) + ";extended properties=" + """excel 12.0 Xml;IMEX=1;hdr=yes;""" Dim odDataReader As OleDbDataReader Dim oledbConn As New OleDbConnection(sExcelConnectionString) Dim oledbCmd As New OleDbCommand(ExcelDataQuery, oledbConn) oledbConn.Open() 'Execute Excel Query odDataReader = oledbCmd.ExecuteReader() 'DB Connection open Dim Conn As New SqlConnection("DB ConnectionString") Conn.Open() Dim bulkcopy As New SqlBulkCopy(Conn) bulkcopy.DestinationTableName = "dbo.Customer" 'Mapping the columns Dim mapCustomerPONum = New SqlBulkCopyColumnMapping(0, "CustomerPONum") Dim mapLineNum = New SqlBulkCopyColumnMapping(1, "LineNum") Dim mapSignDate = New SqlBulkCopyColumnMapping(2, "SignDate") 'Add on BulkCopy bulkcopy.ColumnMappings.Add(mapCustomerPONum) bulkcopy.ColumnMappings.Add(mapLineNum) bulkcopy.ColumnMappings.Add(mapSignDate) bulkcopy.BatchSize = 10000 bulkcopy.BulkCopyTimeout = 180 bulkcopy.NotifyAfter = 50000 bulkcopy.WriteToServer(odDataReader) '---- ERROR RETURN HERE ---- bulkcopy.Close() End Sub 

exception错误

 Not a legal OleAut date. stack: at System.DateTime.DoubleDateToTicks(Double value) at System.Data.OleDb.ColumnBinding.Value_DATE() at System.Data.OleDb.ColumnBinding.Value() at System.Data.SqlClient.SqlBulkCopy.GetValueFromSourceRow(Int32 destRowIndex, Boolean& isSqlType, Boolean& isDataFeed, Boolean& isNull) at System.Data.SqlClient.SqlBulkCopy.ReadWriteColumnValueAsync(Int32 col) at System.Data.SqlClient.SqlBulkCopy.CopyColumnsAsync(Int32 col, TaskCompletionSource`1 source) at System.Data.SqlClient.SqlBulkCopy.CopyRowsAsync(Int32 rowsSoFar, Int32 totalRows, CancellationToken cts, TaskCompletionSource`1 source) at System.Data.SqlClient.SqlBulkCopy.CopyBatchesAsyncContinued(BulkCopySimpleResultSet internalResults, String updateBulkCommandText, CancellationToken cts, TaskCompletionSource`1 source) at System.Data.SqlClient.SqlBulkCopy.CopyBatchesAsync(BulkCopySimpleResultSet internalResults, String updateBulkCommandText, CancellationToken cts, TaskCompletionSource`1 source) at System.Data.SqlClient.SqlBulkCopy.WriteToServerInternalRestContinuedAsync(BulkCopySimpleResultSet internalResults, CancellationToken cts, TaskCompletionSource`1 source) at System.Data.SqlClient.SqlBulkCopy.WriteToServerInternalRestAsync(CancellationToken cts, TaskCompletionSource`1 source) at System.Data.SqlClient.SqlBulkCopy.WriteToServerInternalAsync(CancellationToken ctoken) at System.Data.SqlClient.SqlBulkCopy.WriteRowSourceToServerAsync(Int32 columnCount, CancellationToken ctoken) at System.Data.SqlClient.SqlBulkCopy.WriteToServer(IDataReader reader) at PocSys.DAL.tb_POLine_iSales_Upload_DAL.ImportDataFromExcel_DAL(String excelFilePath, String sheetName, String userID, String& ReturnMsg) Target: Int64 DoubleDateToTicks(Double) Source: mscorlib 

关于SQL数据库,现在SignDate列是nvarchar(100),但是我已经用datetime尝试过了,并没有工作,它接受空值。