Как я могу использовать SqlBulkCopy с двоичными данными (byte []) в DataTable? - PullRequest
9 голосов
/ 04 января 2010

Я пытаюсь использовать 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.

Любая помощь будет принята с благодарностью

1 Ответ

8 голосов
/ 04 января 2010

Вместо:

table.Columns.Add("Data");

Добавить столбец «Данные» в двоичном виде:

table.Columns.Add("Data", typeof(Byte[]));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...