C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: C# + SQLServer バイナリデータ操作


(過去ログ 98 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■58763 / inTopicNo.1)  C# + SQLServer バイナリデータ操作
  
□投稿者/ nick (1回)-(2011/04/26(Tue) 08:51:36)

分類:[.NET 全般] 

C#を使用してSQLServerにファイルをアップロードして、その後ダウンロードして保存というシステムを作成しています。
アップロードに使用するINSERT文のバイナリ部分は以下のようにして行っています。
"0x" + string.Join("",binData.Select(p => Convert.ToString(p,16)));

「binData」がByte[]の変数です。

で、抽出する際は以下のように行っています。
Byte binData = (Byte[])reader["IMAGE"];

「reader」がSqlDataReader変数で、"IMAGE"がDBのカラム名です。

このようにやると例として以下のように0の部分のデータがおかしくなります。
binData[0] = 255
binData[1] = 161
binData[2] = 0
binData[3] = 0
binData[4] = 177
これをSQL文には以下のように変換します。
"0xFFA100B1"

これをDBに保存まではできているのですが、SELECTして復元すると
binData[0] = 255
binData[1] = 161
binData[2] = 0
binData[3] = 177

のようになっています。
どうも2文字ずつ読み込んで"00"の部分を0として認識しているように思えます。

なにか変更すべき点はありますでしょうか?

引用返信 編集キー/
■58764 / inTopicNo.2)  Re[1]: C# + SQLServer バイナリデータ操作
□投稿者/ shu (649回)-(2011/04/26(Tue) 08:55:36)
No58763 (nick さん) に返信

> "0xFFA100B1"

0x FF A1 00 B1

2桁づつ分けてみました。
引用返信 編集キー/
■58766 / inTopicNo.3)  Re[1]: C# + SQLServer バイナリデータ操作
□投稿者/ 魔界の仮面弁士 (2157回)-(2011/04/26(Tue) 10:18:45)
No58763 (nick さん) に返信
> "0x" + string.Join("",binData.Select(p => Convert.ToString(p,16)));
> 「binData」がByte[]の変数です。

確か、BitCoverter.ToString を使うと、byte配列を16進数表記な
"ff-a1-00-b1" 形式の文字列にできたと思うので("FF-A1-00-B1"だったかも)
そこからReplace で "-" を ""に切り捨ててみるとか。

もしくは .Select のラムダ式を、byte.ToString か string.Format の
呼び出しに変えて、書式指定で2桁16進を返すようにするとか。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -