2011-02-10 14 views
14

にSQL ServerのVARBINARYデータの変換、私は中にそれを表示するために、文字列にvarbinary型(最大)として設定されているSQL Serverのテーブルの列から来るデータを変換する方法を考え出す助けが必要ラベル。文字列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]; エラー**私は暗黙のうちに 'オブジェクト'を 'byte []'に変換できません。明示的な変換が存在する... ** – PercivalMcGullicuddy

+0

@Kronprinz:はい、明示的なキャストが必要です。私はそれを含む答えを編集しました。 – LukeH

+1

あなたはこの答えを正しいものとして受け入れることができます。後で他の人がすぐに適切なソリューションを見つけるのを助けることができます。 –

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のみを読み取る画像ビューアにロードしようとしているのと同じですが、間違ったエンコーディングを取得した場合、が表示される可能性があるため、一部の文字列ではと表示されます。

次は、最初にバイナリとして保存されている理由です。テキストであれば、そのように格納されないのはなぜですか。