|
■No42177 (裕猫 さん) に返信
> ORACLEにバイナリデータを保存するときに数値の変換と保存で困っています。
> 1000という数値をint型バイナリで保存すると E8-03-00-00 になりますが、ORACLEの中はこれが 00-00-03-E8 というバイト値が反対のデータで保存されています。なのでint型1000 をバイトデータの反転をして保存しなければならないのですが、その辺の知識不足でうまくいきません。
失礼ながら、知識不足というより考慮不足あるいはデバッグ不足かと思います。
> string sqlstr = "insert into TEST_HI01(COL1, COL2, COL3) values('" + textBox1.Text + "','" + textBox2.Text + "', '" + bt4 + "')";
このコードの内容を見てみましたか?そもそも textBox1 と textBox2 の内容が示されていないのでわかりませんが
insert into TEST_HI01(COL1, COL2, COL3) values('1','2', 'System.Byte[]')
のようになっているかと思います。これでは全く意味がありません。
というか、そもそも COL3 にはどのような形で入るのが正しいのでしょうか。
00-00-03-E8 ?
000003E8 ?
BLOB 型を使っているというのであれば、そもそも SQL から変更しないといけませんし、その部分が明確になっていないので
回答は難しいです。
> byte[] bt3 = BitConverter.GetBytes(I);
> byte[] bt4 = new byte[4];
> Array.Copy(bt3, 3, bt4, 0, 1);
> Array.Copy(bt3, 2, bt4, 1, 1);
> Array.Copy(bt3, 1, bt4, 2, 1);
> Array.Copy(bt3, 0, bt4, 3, 1);
この部分も、Array.Copy を使う必要はまったくありません。
byte[] bt3 = BitConverter.GetBytes(I);
byte[] bt4 = new byte[4];
bt4[0] = bt3[3];
bt4[1] = bt3[2];
bt4[2] = bt3[1];
bt4[3] = bt3[0];
のように簡潔に書けるはずです。
|