Я делаю массовую вставку:как вставить DateTime в момент (0) поле
// Get the data into the DataTable
//dtData = GetData(...);
// Create an object of SqlBulkCopy
SqlBulkCopy objSBC = new SqlBulkCopy(connection);
// Specify the destination table
objSBC.BulkCopyTimeout = 0;
objSBC.BatchSize = 10000;
objSBC.DestinationTableName = "QuickLabDump";
// Write the data to the SQL Server
objSBC.WriteToServer(QuickLabDump);
моего DataTable, что я вставив выглядит так:
QuickLabDump = new DataTable();
QuickLabDump.Columns.Add("Time Collected", typeof(TimeSpan));
QuickLabDump.Columns.Add("Time Entered", typeof(TimeSpan));
QuickLabDump.Columns.Add("Time Completed", typeof(TimeSpan));
QuickLabDump.Columns.Add("Test Time", typeof(TimeSpan));
QuickLabDump.Columns.Add("Date Collected", typeof(DateTime));
QuickLabDump.Columns.Add("Date Entered", typeof(DateTime));
QuickLabDump.Columns.Add("Date Completed", typeof(DateTime));
QuickLabDump.Columns.Add("Test Date", typeof(DateTime));
......
При запуске массовой вставки от C# (код выше), я получаю следующее сообщение об ошибке:
The given value of type DateTime from the data source cannot be converted to type time of the specified target column.
Я думаю, что проблема в том, что я вставив typeof(DateTime)
в SQL Server 2008 таблицу, которая является time(0)
Вот пример данных, которые я вставив:
6:50:00 AM
6:50:00 AM
6:50:00 AM
10:36:00 AM
4:45:00 PM
7:39:00 PM
Вопрос: как я могу определить DataTable столбец правильно, так что он будет вставить выше значения времени в столбце time(0)
?
Вот ценности, которые уже существуют в таблице базы данных во времени (0) поля:
14:57:00
14:58:00
14:58:00
14:57:00
10:49:00
13:31:00
14:02:00
14:13:00
14:20:00
14:56:00
15:00:00
Это, как я добавляю данные в DataTable
:
public DataTable dt;
public ReadFileIntoDataTable(string inputfile)
{
using (GenericParserAdapter parser = new GenericParserAdapter())
{
parser.SetDataSource(inputfile);
char[] delimiters = new char[] { ',' };
parser.ColumnDelimiter = delimiters[0];
parser.FirstRowHasHeader = true;
//parser.SkipDataRows = 10;
parser.MaxBufferSize = 4096;
//parser.MaxRows = 500;
parser.TextQualifier = '\"';
dt = parser.GetDataTable();
}
Вам необходимо избавиться от AM/PM и преобразовать оставшуюся строку в 24-часовой формат времени (d.ToString («H: mm»), где столица «H» означает 24 часа). –
@ RussellFox благодарит так много, я сделал это и почему-то получаю ту же ошибку –
хорошее объяснение., Я пытаюсь понять, что может быть ошибкой. –