2017-03-29 5 views
1

C#コードを使用して、Varbinary型のSQL Serverテーブルの列にバイト配列を格納する必要があります。今私がこれをしようとすると、"0x4A6974656E6472612053616E6B686C61"バイト配列a[] = { 74, 105, 116, 101, 110, 100, 114, 97, 32, 83, 97, 110, 107, 104, 108, 97}としてSQL Serverテーブルの値を取得します。私はこれがどのように行われているのか分かりません。私が得た値は実際には各10進数のヘキサ表現です。バイト配列がVarbinary型のSQL Serverテーブルの列に格納される方法は?

これは、varbinary sqlテーブルの列にバイト配列を格納しているときにsql serverが内部変換を実行するようなものですか?

+0

DBにどのように格納されているか、実際のバイト配列を取得したいのですか? –

答えて

8

linkは、VARBINARY(MAX)のデータタイプが格納および取得の方法でどのように動作するかを表します。

私の知る限り、値のバイナリ表現はSQL Serverのバージョンによって異なる場合があります。それはバイトを表現する一つの半読めるバージョンですので

これlinkは、あなたは、バイナリ変換およびvarbinary型のデータ

3

あなたがフィールドに格納されている実際のバイナリ値の進文字列表現を見るのに役立ちます。他にどのように表示する必要がありますか?

文字列表現と実際のバイトは同じではありません。これはほとんどのタイプに当てはまります。 7622389という整数を格納すると、実際にはフィールドのサイズに応じていくつかのバイト数として格納されます。しかし、値の文字列表現の代わりに実際のバイトを表示すると、混乱するだけです。

汎用バイナリデータの場合、16進文字列形式は論理文字列表現です。 Sql Server管理スタジオイメージファイルまたはその他のよく知られたファイル形式を構成するためにバイトが発生した場合、理論的に画像のサムネイルを表示できます。しかし、フィールドには汎用のバイナリデータが含まれているだけなので、実際には何が最良の表示形式なのかを知ることができないので、16進文字列が使用されます。

データベースからC#プログラムまでフィールドを実際に選択すると、戻ってくるものは通常、何らかの種類のコンテナタイプ内にラップされることがあるbyte[]です。

1

はこれを試してみてください:

DECLARE @bin VARBINARY(MAX)=0x4A6974656E6472612053616E6B686C61; 
SELECT CAST(@bin AS VARCHAR(MAX)) 

結果Jitendra Sankhlaがきれいに見える - オム - フィット... :-)

いくつかの背景を:

VARBINARYは、BLOB以外の何ものでもありません。 SELECTでは、がHEX文字列としてと表示されていますが、これはが実際にに格納されている方法ではありません。

VARBINARYの列には、写真、文字列、数字、XML、複雑な構造のすべてを文字通り保存できます。 - ポイントは、これを読んで解釈する方法を知っていなければなりません。

なぜ私はこれをVARCHARにキャストしましたか?あなたの数字は平文のASCIIコードのように見えます。VARCHARは、1バイト拡張ASCII文字列を表すデータ型です(バインドされた照合はコードページのように定義されており、の非平文文字の解釈とソート)。
バイト後にバイトで渡すと仮定すると、通常の文字列に変換すると、バイトの値に応じた文字になります。

バイナリを文字列に変換しないことは明らかです。
0〜255の間の多くの値は印刷できません。他の痛みの原因は、照合/コードページの設定が異なることがあります。さらに、utf-8のようなエンコーディングで文字列を渡すと、utf-8は1バイト以上の文字をエンコードするため、いくつかのエラー文字が表示されます。

しかし、簡単な例では動作します。

関連する問題