2014-02-15 166 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