我正在導入一些Excel文件到SQL Server使用C#控制檯應用程序與SqlBulkcopy和導入日期時間值時接收以下異常。日期時間值在SQL批量插入
例外: 當我們要進行批量複製時,會出現此異常,其中一列或多列具有日期時間數據類型。我認爲它與日期格式有關,下面是錯誤細節。
「數據源中String類型的給定值不能轉換爲指定目標列的類型datetime」。
代碼片段
sExcelConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + excelFilePath + ";Extended Properties=" + "\"Excel 12.0;HDR=No;IMEX=1;\"";
OleDbConnection OleDbConn = new OleDbConnection(sExcelConnectionString);
OleDbTransaction tran;
OleDbCommand OleDbCmd = new OleDbCommand(myExcelDataQuery, OleDbConn);
OleDbConn.Open();
OleDbDataReader dr = OleDbCmd.ExecuteReader();
if (dr.HasRows && dr.FieldCount > 1)
{
//DataTable dt = readReader(dr);
try
{
string sSqlConnectionString = connectionString.ToString();
string sClearSQL = "DELETE FROM " + sSQLTable;
SqlConnection SqlConn = new SqlConnection(sSqlConnectionString);
SqlCommand SqlCmd = new SqlCommand(sClearSQL, SqlConn);
SqlConn.Open();
//SqlCmd.ExecuteNonQuery();
SqlConn.Close();
SqlBulkCopy bulkCopy = new SqlBulkCopy(sSqlConnectionString);
bulkCopy.DestinationTableName = sSQLTable;
bulkCopy.BulkCopyTimeout = 0;
while (dr.Read())
{
bulkCopy.WriteToServer(dr);
imported = true;
}
OleDbConn.Close();
if (valToField.ToString() != "")
{
sClearSQL = "DELETE FROM " + sSQLTable + " where " + valToField + "='" + valToRemove.ToString() + "'";
SqlCmd = new SqlCommand(sClearSQL, SqlConn);
SqlConn.Open();
SqlCmd.ExecuteNonQuery();
}
SqlConn.Close();
}
catch (Exception ex)
{
LogMessageToFile("Error While Inserting Data from : " + excelFilePath.ToString() + " to table : " + dbtable.ToString() + ex.Message.ToString());
}
}
請建議的解決方案
感謝
這是您自己的自定義異常消息嗎?一些代碼和真正的例外會很高興在板上 – V4Vendetta
更新了問題 –
您需要理智檢查您的文件。確保日期格式爲sql友好格式。如今天的「20120612」。如果你不能確保日期格式是正確的,那麼你需要兩個階段;將該數據導入到保存表中的'VARCHAR()'字段,然後檢查數據並將其複製到最終的目標表中 - 在複製過程中進行轉換。通過這種方式,您也可以選擇記錄未通過完整性檢查的記錄。 – MatBailie