2011-09-27 4 views
10

C#では、SQL Server Management Studioがvarbinary列の内容として示すテキスト出力をどのように取り、そのテキストを列に格納されたバイト[]に変換できますか?バイトへの可変テキスト表現

答えて

3
SqlConnection conn = new SqlConnection(yourConnectionString); 
    SqlCommand cmd = new SqlCommand("select col from yourtable", conn); 
    SqlDataReader reader = cmd.ExecuteReader(); 
    if (reader.HasRows) 
    { 
     byte[] bytes = (byte[])reader[0]; 
    } 
    reader.Close(); 
    conn.Close(); 
+0

ありがとうございます。しかし、SQL Server Management Studioウィンドウからテキストをカットアンドペーストしたいと思います。私はデータベースを再クエリーしたくありません。 – Slaggg

+2

SSMSは、フォーマットされたデータを表示するように設計されたクライアントアプリケーションです。データベースから返される基本のバイナリデータにアクセスするためのインタフェースはありません。これは、この回答に記載されているプログラム的なインターフェースが目的とするものです。 SSMSはこのための間違ったツールです。 –

+0

@ChrisSmith私は同意しません - バイナリデータフィールドのSSMSテキスト表現で表示されるテキストコンテンツは、フィールドに格納されている実際のデータとは明確に関連しています。 – Slaggg

24

OK、あなたがコピー&ペーストvarbinary型の列(例えば「0x6100730064006600」)のためにSSMSに表示されている値を、そして取得したいので、C#で、それからのバイト[]?

これはかなり簡単です.0xの後の部分は16進値(それぞれ2文字)です。だから、あなたは、16のベース(16進数)を指定する番号に変換し、各ペアを取り、それをリストに追加し、そのよう:

string stringFromSQL = "0x6100730064006600"; 
List<byte> byteList = new List<byte>(); 

string hexPart = stringFromSQL.Substring(2); 
for (int i = 0; i < hexPart.Length/2; i++) 
{ 
    string hexNumber = hexPart.Substring(i * 2, 2); 
    byteList.Add((byte)Convert.ToInt32(hexNumber, 16)); 
} 

byte [] original = byteList.ToArray(); 

免責事項 - かなり危険なとunoptimalコード、私はちょうどそれをハッキング一緒にデモンストレーションの目的のために(それは動作するはずです)。

+0

コードが最適でないのはなぜですか?それはかなり私の意見でokと思われる:) –

+1

@Żubrówka - 可読性の面では、それほど悪くはない。パフォーマンスに関しては、アレイを使用することもできます。なぜなら、どれだけの大きさが必要かを正確に知っているからです。別のデータ構造を使い、次に.ToArray() - それは私に少し余裕があるようですが、私は主に明快さと可読性のためにそれをしました:) –

+2

私の一日を作った。多くのありがとう – rank1

関連する問題