У меня есть datatable с одним столбцом, у которого есть путь к файлу изображения. Мне нужно заменить путь к файлу байтовым массивом этого изображения. Следующий код дает мне ошибку.
Данное значение типа String из источника данных не может быть преобразовано в тип varbinary указанного целевого столбца.
for (int rowIncrement = 0; rowIncrement < dt.Rows.Count; rowIncrement++)
{
byte[] photo = GetPhoto(dt.Rows[rowIncrement]["image"]);
dt.Rows[rowIncrement]["image"] = photo;
dt.AcceptChanges();
}
using (SqlBulkCopy copy = new SqlBulkCopy(sqlCon, SqlBulkCopyOptions.KeepNulls | SqlBulkCopyOptions.KeepIdentity, null))
{
copy.DestinationTableName = "UserDetails";
copy.WriteToServer(dt);
}
Тип столбца должен быть указан иначе, если значение столбца по-прежнему является строкой, когда вам нужен байт []
Пример:
// ADD a new column since you cannot change the type
dt.Columns.Add("image_tmp", typeof (byte[]));
for (int rowIncrement = 0; rowIncrement < dt.Rows.Count; rowIncrement++)
{
byte[] photo = GetPhoto(dt.Rows[rowIncrement]["image"]);
dt.Rows[rowIncrement]["image_tmp"] = photo;
dt.AcceptChanges();
}
// REMOVE image column and rename the temporary column
dt.Columns.Remove("image");
dt.Columns["image_tmp"].ColumnName = "image";