【问题标题】:Converting SQL Server varBinary data into string C#将 SQL Server varBinary 数据转换为字符串 C#
【发布时间】:2011-06-24 23:03:18
【问题描述】:

我需要帮助弄清楚如何将来自 SQL Server 表列(设置为 varBinary(max))的数据转换为字符串以便显示它在一个标签中。

这是在 C# 中,我使用的是 DataReader。

我可以使用以下方法提取数据:

var BinaryString = reader[1];

我知道此列包含以前转换为二进制的文本。

【问题讨论】:

    标签: c# sql-server string binary type-conversion


    【解决方案1】:

    这真的取决于你最初从字符串转换为二进制时使用的编码:

     byte[] binaryString = (byte[])reader[1];
    
     // if the original encoding was ASCII
     string x = Encoding.ASCII.GetString(binaryString);
    
     // if the original encoding was UTF-8
     string y = Encoding.UTF8.GetString(binaryString);
    
     // if the original encoding was UTF-16
     string z = Encoding.Unicode.GetString(binaryString);
    
     // etc
    

    【讨论】:

    • byte[] binaryString = reader[1];给我一个错误无法将类型'object'隐式转换为'byte []'。存在显式转换...
    • @Kronprinz:哎呀,是的,它需要一个明确的演员表。我刚刚编辑了答案以包含它。
    • 您可以接受这个答案,然后作为正确答案。它可以帮助其他人稍后快速找到正确的解决方案。
    【解决方案2】:

    您需要知道用于创建二进制文件的编码。然后就可以使用了

    System.Text.Encoding.UTF8.GetString(reader[1]);
    

    并为使用的任何编码更改 UTF8。

    【讨论】:

      【解决方案3】:

      二进制数据必须是编码文本 - 您需要知道使用了哪种编码才能将其准确地转换回文本。因此,例如,您可以使用:

      byte[] binaryData = reader[1];
      string text = Encoding.UTF8.GetString(binaryData);
      

      或

      byte[] binaryData = reader[1];
      string text = Encoding.Unicode.GetString(binaryData);
      

      或各种其他选项...但您需要知道正确的编码。否则,这就像试图将 JPEG 文件加载到只读取 PNG 的图像查看器中......但更糟糕的是,因为如果你得到错误的编码,它可能似乎适用于某些字符串。

      接下来要解决的问题是为什么它首先以二进制形式存储...如果它是文本,为什么不以这种方式存储。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多