Microsoft社の新プロジェクト「Language Integrated Query」(LINQ,「リンク」と発音)は,従来よりも一歩進んだデータベース開発テクノロジである。LINQは,現在のデータベース開発モデルに見られる,オブジェクト指向プログラミング・モデルと手続き型のT-SQLベースのデータ・アクセス・コードの間のギャップを解決する。

 現在のデータベース・アプリケーション開発者は,C#やVisual Basic.NETなどのオブジェクト指向言語を使ってアプリケーションを開発している。一方,ADO.NETは,アプリケーションとデータベースを接続するオブジェクト指向データ・アクセス・ミドルウェアとして使われている。このようにプログラミング言語とデータ・アクセス・テクノロジがどちらもオブジェクト指向であるのに,開発者がデータ・アクセス・コードを記述するときに使うのは,相変わらず手続き型のT-SQLであることが多い。

 ADO.NETは,開発者が作成したT-SQLコードを包含するオブジェクト指向ラッパーを提供して,データ・アクセスを行う。この開発パラダイムでは,開発者にはオブジェクト指向の.NET対応言語だけでなくT-SQLに関する知識も必要であり,開発者はアプリケーションを開発するために2つのテクノロジを使いこなすことを求められる。

 正しい.NETコードの作成を支援する機能としてVisual StudioのIntelliSenseとコード入力補完機能があるが,T-SQLを使った開発を支援するデザイン機能はVisual StudioのIDEには存在しない。例えば,IDEは,使用できるデータベースを一覧表示したり,使用できるテーブルや列を開発者に示すことはできない。また,クエリの構文が正しいかどうかをIDEが認識するのは,実行時に構文エラーによって例外が発生したときだけである。

 LINQテクノロジでは,.NET対応言語の拡張セットを提供することによって,この問題を解決する。この拡張セットを使うと,データベース・アプリケーション開発者はVisual Basic(VB)またはC#でデータベース・クエリを記述および更新することができ,T-SQLでデータ・アクセス・コードを記述する必要はない。LINQを使うことによって,これまでネイティブの.NETコードでしか使えなかったリッチ・メタデータ,コンパイル時の構文チェック,データ型チェック,Visual Studioが備えるIntelliSenseの各機能を,クエリ式でも使うことができるようになる。

 LINQには,XML用(XLinq)とデータベース用(DLinq)の2つの実装が存在する。XLinqは.NET言語をXpathとXQuery機能で拡張し,DLinqは.NET言語をSQL風のクエリ式で拡張する。本記事では,ベータ版で導入された新テクノロジDLinqを紹介し,実際にSQL Serverに接続するコードを例に,SQL Serverデータベースを更新するDLinqの初期コードについて説明する。


Visual Studio 2005に組み込んで利用

 映画「マトリックス」では,現実に対する認識を変えるために,登場人物は青いカプセルを飲み込んだ。LINQはデータベースの世界のアプリケーション開発に対する認識を変えるテクノロジだが,青いカプセルを飲み込む必要はなく,MicrosoftのWebサイトからプレリリース・コードをダウンロードすればよい(LINQの入手方法については,「LINQの入手方法と,使うときの注意」を参照)。LINQサポートをインストールした後,Visual Studio 2005を起動して[ファイル]-[新規作成]-[プロジェクト]の順にメニューを選択して,図1に示すような[新しいプロジェクト]ダイアログ・ボックスが表示されたら,LINQプロジェクトを作成できる。


図1●Visual Studio 2005に組み込まれたDLinq用のプロジェクト・テンプレート
[画像のクリックで拡大表示]

 図1を見ると分かるように,LINQの初期リリースは,Windows Vistaで動作するコンソール・アプリケーション,Windowsアプリケーション,LINQライブラリ,またはWinFXアプリケーションに対応している。Windowsアプリケーションを開発するには,Visual Studioの[新しいプロジェクト]ダイアログ・ボックスで[LINQ Windows Application]テンプレートを選択し,プロジェクト名を指定して[OK]ボタンをクリックする。これでスタートアップ・プロジェクトが生成される。[LINQ Windows Application]テンプレートを選択すると,System.Data.DLinqアセンブリとSystem.XML.XLinqアセンブリへの参照が追加される。また,このテンプレートで,XLinqとDLinqの各名前空間の宣言が追加される。出荷時期など,LINQに関する基本的な質問に対する回答は,「LINQに関するFAQ」にまとめた。