CodeZine(コードジン)

特集ページ一覧

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

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2008/10/06 14:00

 データは文字列や数値のみとは限りません。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)データ型を使用している点に注意してください。


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

著者プロフィール

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

    japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.com や EarthWeb.c...

  • Bipin Joshi(Bipin Joshi)

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

バックナンバー

連載:japan.internet.com翻訳記事

もっと読む

All contents copyright © 2005-2020 Shoeisha Co., Ltd. All rights reserved. ver.1.5