将SQL Server varBinary数据转换为字符串C#

22

我需要帮助解决如何将从设置为 varBinary(max)SQL Server 表列中获取的数据转换为字符串,以便在标签中显示。

这是在 C# 中完成的,并且我正在使用 DataReader

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

var BinaryString = reader[1];

我知道这一列包含之前转换为二进制的文本。

3个回答

46

这主要取决于在最初将字符串转换为二进制时使用的编码方式:

 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

1
byte[] binaryString = (byte[])reader[1];这段代码给我一个错误提示:无法隐式转换类型“object”为“byte[]”。存在显式转换... - PercivalMcGullicuddy
@Kronprinz:哎呀,是的,它需要一个显式转换。我刚刚编辑了答案并加入了它。 - LukeH
1
您可以接受此答案作为正确答案。这可以帮助其他人后来快速找到正确的解决方案。 - Andriy M

10
二进制数据必须是编码文本 - 你需要知道所使用的编码方式,才能准确地将其转换回文本。例如,你可能会使用:

二进制数据必须是编码文本 - 你需要知道所使用的编码方式,才能准确地将其转换回文本。例如,你可能会使用:

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

或者其他各种选项...但是你需要知道正确的编码方式。否则就像尝试将JPEG文件加载到仅读取PNG的图像查看器中一样...但更糟糕,因为如果选择了错误的编码方式,则某些字符串可能会表面上正常工作。

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


2
你需要知道创建二进制文件时使用的编码方式。然后,你可以使用:
System.Text.Encoding.UTF8.GetString(reader[1]);

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接