2010-01-04 32 views
9

我正在嘗試使用SqlBulkCopy將一堆數據導入到我們的網站。在大多數其他領域,我們使用的是使用字節數組來表示SQL中的二進制數據的實體模型。但是,SqlBulkCopy似乎將字節[]與字符串混淆。除了這個引發異常的二進制列之外,一切似乎都正常工作:「來自數據源的String類型的給定值不能轉換爲指定目標列的二進制類型。」如何在DataTable中對二進制數據(byte [])使用SqlBulkCopy?

我創建了一個小的測試案例來說明這個問題:

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); 
       } 
      } 
     } 
    } 
} 

它使用一個測試數據庫,其中有一個名爲Databinary(5)BinaryData表。

任何幫助,將不勝感激

回答

8

相反的:

table.Columns.Add("Data"); 

添加 「數據」 一欄爲二進制:

table.Columns.Add("Data", typeof(Byte[])); 
相關問題