Estoy tratando de usar SqlBulkCopy para importar un montón de datos a nuestro sitio web. En la mayoría de las otras áreas estamos usando un modelo de Entidad que usa matrices de bytes para representar datos binarios en SQL. Sin embargo, SqlBulkCopy parece confundir byte [] con cadena. Todo parece funcionar bien, excepto por esta columna binaria única que arroja una excepción: "El valor dado de tipo String del origen de datos no se puede convertir a tipo binario de la columna de destino especificada".¿Cómo puedo usar SqlBulkCopy con datos binarios (byte []) en una DataTable?
He creado un pequeño caso de prueba para ilustrar el problema:
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);
}
}
}
}
}
Este sistema utiliza una base de datos de prueba con una mesa BinaryData
que tiene una sola columna binary(5)
llamado Data
.
Cualquier ayuda sería muy apreciada