2014-02-15 135 views
1

我有一個表StaffMaster其含有人員照片和該表的數據類型爲VARBINARY。所以,我想用c#代碼將此表導出爲csv文件格式。即使我試圖通過sql server導出任務手動導出該表。但它顯示以下錯誤。如何將二進制數據寫入csv文件?

- Validating (Error) 
Messages 
Error 0xc0208030: Data Flow Task: The data type for "input column 
"StaffPhoto" (376)" is DT_IMAGE, which is not supported. Use DT_TEXT 
or DT_NTEXT instead and convert the data from, or to, DT_IMAGE using  
the data conversion component. 
(SQL Server Import and Export Wizard) 

我知道數據存儲在二進制(byte [])中。但是,我想知道是否有可能我可以將其轉換爲字符串,當我想將其導入到SQL Server數據庫時,它應該轉換爲二進制。所以,我的數據不會丟失。圖像大小可以是100 kb到500 kb。

我無法在csv文件之外存儲圖像。

我使用SQL Server 2005的

+3

你爲什麼不使用nvarchar的,而不是你可以存儲數據和檢索 –

+3

也許編碼的二進制數據爲十六進制字符串時將其寫入CSV並在導入時將其解碼(如果還需要導入)?將原始二進制數據放入CSV文件可能會混亂(並且很可能會)將CSV文件搞亂。 – Ruslan

+1

@dholakiyaankit,因爲nvarchar支持unicode數據格式,每個字符分配2個字節的數據。如果我使用nvarchar而不是二進制,那麼數據庫的大小將會增加。例如,如果圖像大小爲100 kb,則nvarchar數據類型可能會在sql數據庫中消耗200kb。所以,我擔心這個問題。如果nvarchar沒有任何區別,那麼使用nvarchar數據類型沒有問題。 – Shell

回答

6

使用Base64編碼的二進制數據。它將任何二進制數據轉換成可讀字符串。其代碼如下

編碼

public static string Base64Encode(string plainText) 
{ 
    var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(plainText); 
    return System.Convert.ToBase64String(plainTextBytes); 
} 

解碼

public static string Base64Decode(string base64EncodedData) 
{ 
    var base64EncodedBytes = System.Convert.FromBase64String(base64EncodedData); 
    return System.Text.Encoding.UTF8.GetString(base64EncodedBytes); 
} 
+0

感謝您的回答。但是,我怎樣才能找回數據到圖像數據類型。你的Base64Decode方法返回字符串,我想把數據轉換成圖像格式。圖像格式發生了什麼。例如jpg,bmp等。 – Shell

+0

只需更改Decode方法即可返回base64EncodedBytes。這是你的二進制圖像數據。您可以將其序列化回數據庫或映像文件。你需要幫助嗎? – korhner

+0

Base64編碼是否包含文件格式。我的意思是如果我編碼一個PNG圖像到Base64然後我解碼回圖像格式,然後我知道圖像格式。 – Shell