如何在DataTable中使用SqlBulkCopy和二进制数据(byte [])?

Cog*_*eel 11 .net c# sql database

我正在尝试使用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);
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这使用带有BinaryData表的测试数据库,该表具有一个binary(5)名为的列Data.

任何帮助将不胜感激

And*_*mar 10

代替:

table.Columns.Add("Data");
Run Code Online (Sandbox Code Playgroud)

将"数据"列添加为二进制:

table.Columns.Add("Data", typeof(Byte[]));
Run Code Online (Sandbox Code Playgroud)