Я импортирую некоторые файлы excel на сервер sql с помощью консольного приложения c # с SqlBulkcopy и получая следующее исключение при импорте значений времени.
Исключение: это исключение возникает, когда мы собираемся делать массовую копию, где один или несколько столбцов имеют тип данных datetime. Я думаю, что это имеет какое-то отношение к формату даты ниже, это деталь ошибки.
«Данное значение типа 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());
}
}
Пожалуйста, предложите решение
благодаря
Простой ответ заключается в том, чтобы преобразовать ваши даты excel в строки с помощью функции = TEXT (a1, "dd mmmm yyyy hh: mm: ss"), где a1 является ссылкой на ячейку с датой в.
Обратите внимание на четыре м за месяц; всегда лучше использовать полные имена месяцев, и пусть SQL-сервер справится с преобразованием даты на случай, если у вас возник конфликт с сопоставлением даты.
Согласно приведенным ниже комментариям, это будет работать в разных культурах и языках = ТЕКСТ (a1, "yyyy-MM-ddTHH: mm: ss")