Я пытаюсь использовать SqlBulkCopy для импорта набора данных на наш сайт. В большинстве других областей мы используем модель Entity, которая использует байтовые массивы для представления двоичных данных в SQL. Однако SqlBulkCopy, похоже, путает byte [] со строкой. Кажется, все работает нормально, за исключением одного двоичного столбца, который выдает исключение: «Заданное значение типа String из источника данных не может быть преобразовано в двоичный тип указанного целевого столбца.»
Я создал небольшой тест для иллюстрации проблемы:
using System.Data;
using System.Data.SqlClient;
namespace SqlBulkCopyTest
{
class Program
{
static void Main(string[] args)
{
DataTable table = new DataTable("BinaryData");
table.Columns.Add("Data");
for (int i = 0; i < 10; i++)
{
var row = table.NewRow();
row["Data"] = new byte[5] { 1, 2, 3, 4, 5 };
table.Rows.Add(row);
}
using (var connection =
new SqlConnection("Data Source=localhost\\sqlexpress;Initial Catalog=TestBulkCopy;Integrated Security=True"))
{
connection.Open();
using (var copier = new SqlBulkCopy(connection))
{
copier.DestinationTableName = table.TableName;
/* EXCEPTION HERE: */ copier.WriteToServer(table);
}
}
}
}
}
При этом используется тестовая база данных с таблицей BinaryData
, в которой есть один столбец binary(5)
с именем Data
.
Любая помощь будет принята с благодарностью