c# - 如何将 SqlBulkCopy 与 DataTable 中的二进制数据 (byte[]) 一起使用?

标签 c# .net sql database

我正在尝试使用 SqlBulkCopy 将大量数据导入我们的网站。在大多数其他领域,我们使用实体模型,它使用字节数组来表示 SQL 中的二进制数据。但是,SqlBulkCopy 似乎将 byte[] 与 string 混淆了。一切似乎都工作正常,除了这个抛出异常的二进制列:“数据源中 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 表的测试数据库,该表有一个名为 Databinary(5) 列。

任何帮助将不胜感激

最佳答案

代替:

table.Columns.Add("Data");

将“数据”列添加为二进制文件:

table.Columns.Add("Data", typeof(Byte[]));

关于c# - 如何将 SqlBulkCopy 与 DataTable 中的二进制数据 (byte[]) 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2001715/

相关文章:

c# - 用 C# 编写插件或插件框架

SQL Order By 中的 Order By

php - 删除不同表中的条目 MysQL 查询

MySQL INSERT INTO … VALUE 和 SELECT 带有多个字段

c# - 如何使用 GraphDiff 更新相关实体?

c# - 将文档上传到 Sharepoint 时添加元数据

c# - Form.ShowDialog(IWin32Window) 是否应该与任何窗口句柄一起使用?

.net - 这个 Wix 声明在做什么?

c# - 在jquery中调用代码隐藏函数

c# - 对 SharePoint 列表的 CAML 查询返回整个集合