2011-02-10 109 views
14

我需要帮助搞清楚如何从被设置为VARBINARY(最大值)一SQL服务器表列进来数据转换为字符串,以便在显示它一个标签。转换的SQL Server varbinary数据转换为字符串C#

这是C#和我使用的是DataReader的

我可以拉在使用数据:

var BinaryString = reader[1]; 

我知道,此列保存先前转换为二进制文本。

回答

30

这真的取决于它当您最初从字符串转换为二进制文件使用的编码:

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 = reader [1]; 给我一个错误**不能隐式地将类型'object'转换为'byte []'。存在明确的转换... ** – PercivalMcGullicuddy 2011-02-10 16:07:28

2

你需要知道使用的编码,创建二进制。然后你可以使用

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

并且改变UTF8以使用任何编码。

7

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

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

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

或各种其他选项...但你需要知道正确的编码。否则,就像试图将JPEG文件加载到只能读取PNG的图像查看器一样......但更糟糕的是,因为如果得到错误的编码,它可能会出现以便为某些字符串工作。

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

相关问题