我正在尝试使用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)
的{{1}}列。
非常感谢任何帮助
答案 0 :(得分:8)
而不是:
table.Columns.Add("Data");
将“数据”列添加为二进制文件:
table.Columns.Add("Data", typeof(Byte[]));