Использование C #, .net 4, Visual Studio 2010 и SQL Server 2008.
В настоящее время у меня есть таблица под названием NewPeriodPareto
содержит следующие столбцы:
Ниже приведен мой код, который пытается заполнить таблицу:
private void CreateNewPeriod()
{
DataSet dsDG = new DataSet();
DataTable dt = new DataTable();
dsDG = (DataSet)ParetoGrid.DataSource;
dt = dsDG.Tables[0];
string ThetableName = "NewPeriodPareto";
BulkInsertDataTable(myConn, ThetableName, dt);
}
public static void BulkInsertDataTable(string connectionString, string tableName, DataTable table)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlBulkCopy bulkCopy =
new SqlBulkCopy
(
connection,
SqlBulkCopyOptions.TableLock |
SqlBulkCopyOptions.FireTriggers |
SqlBulkCopyOptions.UseInternalTransaction,
null
);
bulkCopy.DestinationTableName = tableName;
connection.Open();
bulkCopy.WriteToServer(table);
connection.Close();
}
}
Как вы можете видеть, в коде приведены попытки скопировать данные из моего datatable. Данные привязаны к источнику данных My data.
Ниже приведена ошибка:
@ BulkCopy.WriteToServer (таблица);
Данное значение типа Int32 из источника данных не может быть преобразовано в тип изображения указанного целевого столбца.
Теперь первое, что я подумал, это то, что в одном из полей моей таблицы SQL был неправильный тип, но после проверки много раз, кажется, нет ничего плохого.
Итак, то, что мне нужно, является решением этой небольшой проблемы или даже альтернативным / более простым способом достижения той же цели, то есть заполнить таблицу SQL из программ DataTable.
[Короткое время, поэтому я собираюсь уложить вам подсказку]
вы должны посмотреть в ColumnMappings из SqlBulkCopy. Это позволяет явно сопоставить столбец вашего источника с целью. Там могут быть некоторые дополнительные столбцы, такие как ID или аналогичные, которые находятся на пути прямо сейчас.