第1回 ADO.NETでプログラミングを始める前に:基礎解説 ADO.NET基礎講座 ―初めての.NETデータベース・プログラミング―(2/3 ページ)
.NET Frameworkの新機能ADO.NETを使って、データベースを扱うプログラミングに挑戦してみよう。まずはデータベースを準備し、その構造を知る。
インスタンス、データベース、テーブル
ここまでで、MSDEをインストールし(同時にNetSDKインスタンスが作成され)、4つのサンプル・データベースを作成した。各サンプル・データベースには、サンプル・データも作成される。これらのデータは、実際にはデータベース内に作成された複数の「テーブル」に、複数の「レコード」として格納されている。
これらの様子は、SQL Serverに付属するGUIツール「SQL Server Enterprise Manager」があれば、その画面で確認することができる(VS.NETのサーバ・エクスプローラでも同様の画面を表示できる)*2。
*2 SQL Serverを購入していなくても、「SQL Server 2000 Enterprise Edition 120日間限定評価版」を入手すれば、「SQL Server Enterprise Manager」だけをインストールして使用することができる。だが本稿執筆時点では、評価版にはSQL Server 2000 SP3を適用できないため、ダウンロード不可になっているようだ。
GUIツール「SQL Server Enterprise Manager」
SQL Serverに付属のGUIツール。データベースの作成から管理までをすべてこのツールで行うことができる。
(1)インスタンス、データベース、テーブルは階層的に管理されている。まずインスタンスを開く。
(2)続いて[データベース]を開くと、インスタンスにあるデータベースが列挙される。
(3)さらにデータベースを開いて、[テーブル]を選択すると、画面右側にテーブルの一覧が表示される。
(4)データベースに含まれているテーブルの一覧。[種類]が「ユーザー」となっているテーブル(反転させている部分)は、ユーザーが作成したものであり、アプリケーションのデータはこれらのテーブルに格納される。
画面では、[SQL Serverグループ]に登録されている幾つかのインスタンスのうち、(1)「TAKAP4\NetSDK」というインスタンス(TAKAP4というコンピュータのNetSDKインスタンス)を開いているところだ。
各インスタンスには、フォルダ・アイコンで表示された幾つかの項目が存在するが、このうちの(2)[データベース]を開くと、そのインスタンスにあるデータベースを見ることができる。4つのサンプル・データベース以外にも、「master」や「model」などのデータベースが自動的に作成されているのが分かるが、これらはインスタンスを管理するための情報などが入ったデータベースであり、通常は気にする必要はない。
上の画面では、4つのサンプル・データベースのうち、pubsデータベースを開いている。各データベースにもまた、幾つかの項目が存在するが、このうち(3)[テーブル]を選択すると、このデータベースに含まれている全テーブルが、画面の(4)右半分に列挙される。
画面では31個のテーブルが存在しているが、このうち[種類]が「ユーザー」となっている、「authors」から「titles」までの11個のテーブル(反転表示させている部分)が、サンプル・データベースのインストール時に作成された、サンプル・データを含んだテーブルだ。それ以外の、[種類]が「システム」となっているテーブルは、テーブルを管理するためのデータや、テーブルのアクセス権を管理するデータなどを格納したテーブルで、これらも通常は気にする必要はない。SQL Serverでは、こういったデータベースやテーブルを管理するためのシステム・データ自体も、社員情報や製品情報といったユーザー・データと同様に、テーブル内で管理しているのだ。
テーブルの構造
データベースのテーブルは、「表」形式でデータを保持している。テーブルは、列(項目、カラムなどとも呼ばれる)と行(レコードとも呼ばれる)で構成されている。
SQL ServerのGUIツールや、VS.NETのサーバ・エクスプローラでは、各テーブルを開いて、そこに格納されているレコードを列挙することができる*3。次の画面は、VS.NETのサーバ・エクスプローラで、pubsデータベース内にあるpublishersテーブルを開いているところだ。
*3 .NET Framework SDK+MSDEしかインストールしていない場合は、取りあえず、コマンド・プロンプトから後述するコマンドライン・ツールを使用してレコード一覧を出力することができる。あるいは、今回の最後でデータベース、テーブル、テーブル内のレコードを一覧できるツールを作成するので、そのコードをコンパイルして利用していただきたい。
このpublishersテーブルには、次の5つのカラムがあることが分かる。
- pub_id
- pub_name
- city
- state
- country
そしてテーブルには、8つのレコードが格納されていることが分かる。テーブル名とレコードの内容から、このテーブルは恐らく出版社に関するデータであろう。pub_idカラムが出版社に振られたID(管理番号)、pub_nameカラムが出版社の社名、それ以外の3つのカラムは出版社のロケーションを表している(と、明記されたドキュメントがあるわけではないが、そう理解しても問題ない)。
コマンドライン・ツール「osql.exe」
ここまでは、テーブルの内容を確認するためにGUIツールを利用したが、MSDEに付属するコマンドライン・ツール「osql.exe」を使用しても同様の操作が可能だ。MSDEをインストールした環境では、コマンド・プロンプトを開いて直接「osql」と入力すれば使えるはずだ。ただし、コマンドのオプションとして、少なくとも次の3つのオプションを指定しておく必要がある。
オプション | 機能 |
---|---|
-S | 接続するデータベースのサーバ名(あるいは「サーバ名\インスタンス名」)を指定する。ただしローカル・コンピュータを指定する場合でも、なぜかサーバ名として“localhost”は指定できず、代わりに“(local)”を指定しなければならない。よって、今回のNetSDKの場合には、“(local)\NetSDK”となる |
-E | Windows認証モードでSQL Serverに接続する。SQL Serverでは、接続しようとしているユーザーがデータベースにアクセスできるかどうかをチェックするのに、2つの認証モードが用意されている。その1つが「Windows認証」で、これはWindowsにログオンしているアカウントを用いてSQL Serverでの認証も行ってしまうモードだ。このモードがMSDEのデフォルトである。もう1つの認証モードは、「SQL Server認証」で、こちらはユーザー名とパスワードを指定してSQL Serverのレベルで認証を行う。このモードは、Windows以外の環境からもSQL Serverのデータベースを利用できるように用意されたモードである。MSDEでこちらのモードに切り替える方法はマイクロソフトサポート技術情報「[HOWTO] Microsoft Desktop Engine に接続する方法」に記述されている |
-d | 使用するデータベースを指定する |
osqlツール使用時に必要なオプション |
例えば、publishersテーブルを含んでいるpubsデータベースに接続するには、コマンド・プロンプトで次のように入力すればよい。
osql -S (local)\NetSDK -E -d pubs
次の画面のように、「1>」と画面に表示されれば接続は成功だ。
osqlツールでデータベースに接続した画面
コマンド・プロンプトから3つのオプション(-S、-E、-d)を指定して、osqlツールを実行している。「1>」に続いて、データベースへのコマンドを入力していく。
ここで接続に使用したオプションの内容は、プログラムからデータベースに接続する場合にも使用するので記憶しておいてほしい。
SQL文によるレコードの表示
osqlツールでは、データベースに対して「SQL」文を発行して、データベースにアクセスする。
SQL(Structured Query Language:構造化問い合わせ言語)は、データベース定義(データベースやテーブルの作成など)やデータベース操作(テーブルへのレコードの登録、検索など)を行うための規格化された言語で、現在ほとんどのデータベース製品でサポートされている。
最もよく使用されるSQL文の1つは「select」文だ。select文は特定のテーブルに対して、指定した条件に合うレコードのカラムを抽出することができる。例えば、前項でも取り上げたpublishersテーブルから、米国にある出版社の出版社名とそのIDを取り出すためには、次のようなSQL文を使用する。
select pub_id, pub_name from publishers where country = 'USA'
select文の基本的な構文は次のとおりだ。
select 取得するカラム from テーブル名 where 取得するレコードの条件
実際に上のselect文を実行すると、次のような画面になる。select文の次に「2>」で入力している「go」は、入力したselect文をデータベースに送信するためのコマンドだ。
osqlツールでselect文を実行した画面
select文と入力し、続けて「go」を入力することにより、データベースでselect文が実行され、その結果が画面に表示される。ここでは6件のレコードがselect文の条件にマッチしている。
先ほどのVS.NETで表示させた8つのレコードのうち、countryがUSAとなっているレコードのpub_idカラムとpub_nameカラムのデータが表示されていることが確認できるだろう。
ここではosqlツールを使用し、まずデータベースに接続し、select文を発行してデータベースに問い合わせを行ったが、この手順はプログラムからデータベースにアクセスする場合も基本的に同じだ。
SQLには、select文以外にも、
- テーブルからレコードを削除するdelete文
- レコード内のデータを更新するupdate文
- 新しいレコードをテーブルに挿入するinsert文
などが用意されている。次回以降では、その都度これらの構文を解説しながら、プログラムからこれらのSQL文を使用していく。
Copyright© Digital Advantage Corp. All Rights Reserved.