【问题标题】:How to write binary data into csv file?如何将二进制数据写入csv文件?
【发布时间】:2014-03-14 16:13:34
【问题描述】:

我有一个表 StaffMaster,其中包含 员工照片,该表的数据类型是 varbinary。所以,我想使用 c# 代码将此表导出为 csv 文件格式。即使我尝试通过 sql server 导出任务手动导出该表。但它显示以下错误。

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

我知道数据存储在二进制(字节[])中。但是,我想知道我是否可以将它转换为字符串,当我想将它导入到 sql server 数据库时,它应该转换为二进制。所以,我的数据不会丢失。图像大小可以是 100 kb 到 500 kb。

我无法将图像存储在 csv 文件之外。

我使用的是 SQL Server 2005。

【问题讨论】:

  • 为什么不使用 nvarchar 来存储和检索数据
  • 也许在将二进制数据写入 CSV 时将其编码为十六进制字符串,然后在导入时将其解码回来(如果您还需要导入)?将原始二进制数据放入 CSV 文件可能会(而且很可能会)弄乱 CSV 文件。
  • @dholakiyaankit 因为 nvarchar 支持 unicode 数据格式,每个字符分配 2 个字节的数据。如果我使用 nvarchar 而不是二进制,那么数据库大小将增加。例如,如果图像大小为 100 kb,则 nvarchar 数据类型可能在 sql 数据库中消耗 200 kb。所以,我害怕这个问题。如果 nvarchar 没有任何区别,则 nvarchar 数据类型没有问题。
  • 你没有考虑清楚 - 你打算用二进制数据做什么?什么代码或程序会消耗它?该程序需要什么格式? 这是您需要写入 CSV 的格式。
  • 如果您正在处理图像,我建议您选择文件夹选项,这总是会导致无聊,您的客户总是会给您打电话哦............ .它太慢了

标签: c# sql-server csv


【解决方案1】:

对二进制数据使用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);
}

【讨论】:

  • 感谢您的回答。但是,我怎样才能将数据取回图像数据类型。您的 Base64Decode 方法返回字符串,我希望将数据转换为图像格式。图像格式会发生什么。例如 jpg、bmp 等。
  • 只需更改解码方法以返回 base64EncodedBytes。这是您的二进制图像数据。您可以将其序列化回数据库或图像文件。您需要这方面的帮助吗?
  • Base64 编码是否包含文件格式。我的意思是,如果我将 png 图像编码为 Base64,然后我将其解码回图像格式,那么我知道图像格式。
  • 您要问的是另一个问题-我可以仅根据其数据确定文件格式吗?这对您的问题来说可能是多余的,您是否可以考虑添加另一列来保持文件格式(jpeg、png、bmp...)?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多