Мне нужно скопировать данные из одной таблицы в другую. Я получаю исключение с сообщением:
The given value of type String from the data source cannot be converted to type uniqueidentifier of the specified target column",
потому что у меня есть столбец с типом данных GUID.
Мой код ...
using (SqlConnection destinationConn = new SqlConnection("Data Source = ''; Initial Catalog = ''; Persist Security Info = True; User ID = ''; Password = ''; MultipleActiveResultSets = true"))
{
using (SqlBulkCopy bc = new SqlBulkCopy(destinationConn))
{
bc.DestinationTableName = "Animal";
destinationConn.Open();
bc.ColumnMappings.Add("guid", "guid"); //UniqueIdentifier
bc.ColumnMappings.Add("Name", "Name");
bc.WriteToServer(dt); //DATA TABLE object
}
}
Как я могу решить эту проблему?
Кроме того, без кода, воспроизводящего проблему, помочь невозможно. Как-то где-то образовался строковый столбец. Как создать этот DataTable?
Посмотрите на Эта проблема, возможно, ваша проблема похожа или в равной степени совпадает с ней.
Все ли значения в столбце GUID допустимые идентификаторы GUID? то есть пустые значения, строки без GUID или идентификаторы GUID, отформатированные неожиданным образом, могут вызвать проблемы. Под последним утверждением я имею в виду, что обычно идентификаторы GUID должны содержать 4 дефиса; если дефисы отсутствуют, SQL может не принять значение. Вы можете дополнительно заключить строки в фигурные скобки, и значения не чувствительны к регистру.





Я столкнулся с подобной проблемой и решил ее.
Если хотите, проверьте мой следующий код.
DataTable dt = new DataTable();
dt.Columns.Add("IdColumn1", typeof(Guid));
dt.Columns.Add("IdColumn2", typeof(Guid));
foreach (var item in MyCollection)
dt.Rows.Add(item.obj1, item.obj2);
using (SqlConnection con = new SqlConnection(ConnectionString))
{
con.Open();
using (var bulkCopy = new SqlBulkCopy(con))
{
bulkCopy.DestinationTableName = "TableName";
bulkCopy.ColumnMappings.Add("IdColumn1", "IdColumn1");
bulkCopy.ColumnMappings.Add("IdColumn2", "IdColumn2");
bulkCopy.WriteToServer(dt);
}
dt.Dispose();
}
Ошибка довольно очевидна. Вы попытались вставить столбец
stringDataTable в столбец таблицыuniqueidentifier. Тип столбца данных должен быть Guid