SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

SQL ServerとADO.NETを用いたBLOB(バイナリラージオブジェクト)の処理方法

  • このエントリーをはてなブックマークに追加

 データは文字列や数値のみとは限りません。SQL Serverのテーブルには、文書、Rawファイル、XMLドキュメント、写真といった大量データを格納する必要が生じます。SQL Serverには、このような大容量データ用の特殊なデータ型が用意されています。本稿では、SQL Server 2005とADO.NETを用いて、BLOB(バイナリラージオブジェクト)を読み書きする方法について説明します。

  • このエントリーをはてなブックマークに追加

はじめに

 データは文字列や数値のみとは限りません。SQL Serverのテーブルには、大量のデータを格納する必要が生じます。例えば、文書、Rawファイル、XMLドキュメント、写真などです。SQL Serverには、このような大容量データ用の特殊なデータ型が用意されています。本稿では、SQL Server 2005とADO.NETを用いて、BLOB(バイナリラージオブジェクト)を読み書きする方法について説明します。

LOBの種類

 LOB(ラージオブジェクト)には多くの種類があります。LOBは、CLOB(キャラクタラージオブジェクト)BLOB(バイナリラージオブジェクト)に大きく分類することができます。幸いなことにSQL Serverには、これらの多様なデータを扱うためのさまざまなデータ型が用意されています。表1は、LOBに関連して使用されるSQL Serverのさまざまなデータ型を示したものです。

表1 SQL ServerにおけるLOBデータ型
LOBの種類 SQL Serverデータ型 最大サイズ
BLOB varbinary(MAX)
Image
2,147,483,647
-
CLOB varchar(MAX)
Text
2,147,483,647
-
CLOB - Unicode nvarchar(MAX)
NText
1,073,741,823
-
XMLデータ xml 2,147,483,647

 Text、NText、Imageの各データ型は、SQL Serverの以前のバージョンで使用されていたものです。これらの代わりに新しいデータ型であるvarchar(MAX)、nvarchar(MAX)、varbinary(MAX)を使用することをお勧めします。

 表1から分かるように、大きなバイナリデータを扱うためのデータ型はvarbinary(MAX)です。従って以下では、.NETアプリケーションにおいてvarbinary(MAX)データを使用する方法について説明します。

BLOBをSQL Serverに格納する

 バイナリデータにはさまざまな種類のものがあります。Word文書、PDF形式の送り状、写真、製品画像、Rawデータはすべて、BLOBデータの例です。.NETアプリケーションにおいてBLOBを格納するには、次の2つの方法があります。

  1. BLOBをディスクファイルとして格納する
  2. BLOBを直接SQL Serverデータベース内に格納する

 どちらの方法にも長所と短所があります。上記(1)の方法は、次のような場合に適しています。

  • SQL Serverの容量が小さい。
  • BLOBデータが第三者によって使用されている。例えば、画像がグラフィックスデザイナーによって作成中である場合など。
  • バイナリデータをファイルシステムベースのエディタで操作したい。例えば、Microsoft Office Suiteを用いてWordやExcelファイルを編集する可能性がある場合など。

 バイナリデータを物理的なファイルとして格納する方法の最大の欠点は、データベース内でバイナリデータを見失ってしまう可能性が高いという点です。例えば、製品画像のURLを含む列があったとします。アプリケーションをあるサーバーから別のサーバーへと移す場合、製品画像に対する物理的なファイルがきちんとアプリケーションに付随しているかどうかを、手作業で確認する必要が生じます。また、データベースのレコードを削除する際には、物理的な画像ファイルも削除しなければなりません。

 BLOBを直接SQL Serverデータベース内に格納する方法には、次のような長所があります。

  • BLOBとそれに関連するデータは常に一体であるため、不整合が生じる可能性はない。
  • BLOBは、通常のデータ転送プロセスによってあるサーバーから別のサーバーへと移されるため、整合性を保つための手作業は不要である。
  • 通常のSQL ServerデータとともにBLOBデータもバックアップされる。
  • コンテンツ管理システムやフォトアルバムなどのアプリケーションは、それが使用するBLOBデータに密接に依存している。このようなアプリケーションでは、BLOBが直接データベース内に格納されていれば、非常に都合がよい。

 以上より、開発するアプリケーションによって、BLOBデータをSQL Server内に格納するべきかどうかを判断することになります。BLOBをSQL Server内に格納した方が良い最も一般的な例として、CMSシステム、フォトアルバム、スライドショーアプリケーション、ドキュメント管理システムなどがあげられます。

BLOBとADO.NET

 BLOBデータは、.NETではバイト配列として表されます。BLOBデータを読み出すには、ADO.NETのSqlDataReaderクラスを使用します。SqlDataReaderクラスを用い、BLOBデータを読み出す方法について、例を示して説明します。

 以下では、SQL Serverデータベースに格納された写真を管理するための、簡単なアプリケーションを作成します。この例の全体を通して、Photosという名前のテーブルを持つSQL Serverデータベースが必要となります。表2に、Photosテーブルのスキーマを示します。

表2 Photosテーブルのスキーマ
列名 データ型 説明
PhotoID int (Identity, Primary Key) 写真を一意に識別するID
Title varchar(255) 写真のタイトル
Description varchar(MAX) 写真の説明
Photo varbinary(MAX) バイナリ形式の実際の写真

 Photo列では、旧式のImageデータ型ではなく、varbinary(MAX)データ型を使用している点に注意してください。

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
BLOBを読み書きする方法

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Bipin Joshi(Bipin Joshi)

 コンサルティング会社BinaryIntellect Consultingを経営し、さまざまな.NET技術に関する優れたトレーニングプログラムを実施。ソフトウェアコンサルタント、メンター、数々の書籍の著者、Webマスター、Microsoft MVP、ASPInsiders会員など、さまざまな肩書きを...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3026 2008/10/06 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング