ジョイ・オブ・プログラミング:
VB研読者向け 特別企画

極小SQL Server Compactでデータベース・アプリをお手軽作成

シグマコンサルティング 菅原 英治
2008/07/01
Page1 Page2 Page3

サンプル・アプリのソース解説

 今回は、SQL Server Compact 3.5を操作しているソースを中心に解説します。

 こちら(VBC#)からソースをダウンロードし、任意の場所に展開してください。

サンプル・アプリのソース構成

 サンプル・アプリは、下記の3つのソース・ファイルで構成されています。

ファイル名 内容
DBUtility.vb/.cs データベースを初期化する処理とコネクション*1を作成する処理を定義しています。本稿で解説します。
FormAdd.vb/.cs アイデアの[追加]ダイアログ。入力されたアイデアを登録する画面です。特に解説しません。
FormMain.vb/.cs アプリのメインのダイアログ。アイデア一覧を表示する画面です。特に解説しません。
サンプル・アプリのソース・ファイルの構成
*1 具体的にはSqlCeConnectionクラス(System.Data.SqlServerCe名前空間)のオブジェクト。通常のADO.NETで利用されるSqlConnectionオブジェクトとほぼ同じような機能(つまりSQL Serverデータベースへの接続機能)を持つと考えてよい。SqlConnectionオブジェクトについては「ADO.NET基礎講座 第2回 .NETデータ・プロバイダによるデータベースのアクセス」を参考にしてほしい。

 それでは、ソース・コードの内容を解説します。

SQL Server Compact 3.5を操作するソース・コード

 繰り返しますが、今回は、SQL Server Compact 3.5を操作しているソース・コードを中心に解説します。具体的には、DBUtility.vb/.csについて解説します。

 このファイルでは、2つの処理が定義されています。第1に、データベースを初期化する処理。第2に、データベースへのコネクションを作成する処理です。

 データベースへのコネクションを作成する処理については、単にコネクション(=SqlCeConnectionオブジェクト)を作成しているだけなので、特に述べることはありません。従って、今回は第1の「データベースを初期化する処理」についてだけ見ていきましょう。

' データベースの初期化
Public Sub InitializeDB()

  ' データベース・ファイルが存在する場合は何もしない
  If File.Exists(DATABASE_FILENAME) Then
    Exit Sub
  End If

  ' データベースを作成する
  Dim engine As New SqlCeEngine(CONNECTION_STRING)
  engine.CreateDatabase()

  ' コネクションを作成して開く
  Using con As SqlCeConnection = GetConnection()
    con.Open()

    ' テーブルを作成する
    Dim commnd As SqlCeCommand = _
      New SqlCeCommand(COMMANDTEXT_CREATE_TABLE_IDEA, con)
    commnd.ExecuteNonQuery()

    ' コネクションを閉じる
    con.Close()
  End Using
End Sub
// データベースの初期化
public static void InitializeDB()
{
  // データベース・ファイルが存在する場合は何もしない
  if (File.Exists(DATABASE_FILENAME))
    return;

  // データベースを作成する
  SqlCeEngine engine = new SqlCeEngine(CONNECTION_STRING);
  engine.CreateDatabase();

  // コネクションを作成して開く
  using (SqlCeConnection con = GetConnection())
  {
    con.Open();

    // テーブルを作成する
    SqlCeCommand command =
      new SqlCeCommand(COMMANDTEXT_CREATE_TABLE_IDEA, con);
    command.ExecuteNonQuery();

    // コネクションを閉じる
    con.Close();
  }
}
DBUtility.vb/.csのデータベースを初期化する処理(上:VB、下:C#)
上記コードのDATABASE_FILENAME、CONNECTION_STRING、COMMANDTEXT_CREATE_TABLE_IDEAは次のような文字列として定義されている。
・DATABASE_FILENAME:
  「idea.sdf」
・CONNECTION_STRING:
  「Data Source = 'idea.sdf'; LCID=1033; Password = strongpassword; Encrypt = TRUE;」
・COMMANDTEXT_CREATE_TABLE_IDEA:
  「CREATE TABLE IDEA(IDEA_ID BIGINT PRIMARY KEY IDENTITY(1,1) NOT NULL, LIMIT_TIME DATETIME NOT NULL, IDEA_CONTENTS NVARCHAR(2000) NOT NULL)」

 簡単にコード内容を説明しておきましょう。

 まず、SQL Server Compact 3.5のデータベースである.SDFファイルが存在するかをチェックしています。すでに.SDFファイルが存在する場合は何も行いません。

 続いて、コード上に太字で示した個所です。.SDFファイルが存在しない場合は、データベースを作成して.SDFファイルを生成しています。SQL Server Compact 3.5でデータベースを作成するには、このようにSqlCeEngineクラス(System.Data.SqlServerCe名前空間)を使ってコードからデータベースを作成できます。

 最後に、作成したデータベースに対しコネクションを作成して、IDEAテーブルを作成しています。コネクションの作成で呼び出されているGetConnectionメソッドでは、前述の第2の処理を実行します。

 そのほかに注意すべき点は、SqlConnectionではなく「SqlCeConnection」、SqlCommandではなく「SqlCeCommand」となっているところです。

 ソースの解説は以上です。

 このようにコードからデータベースの作成、テーブルの構築が行えるため、とても簡単にデータベース・アプリを展開できます。

【コラム】SQL Server Compact 3.5を利用したアプリケーションの展開

 SQL Server Compact 3.5を動作させるのに必要なファイルは、先ほどのサンプル・アプリにも同梱されていた以下の9つのファイルです。これらのファイルは単に配置するだけでよく、それ専用のインストール作業は不要です。

  • sqlceca35.dll     (クライアント・エージェント)
  • sqlcecompact35.dll (データベース修復ツール)
  • sqlceer35JA.dll   (日本語用エラー文字列とリソース)
  • sqlceme35.dll    (マネージ拡張)
  • sqlceoledb35.dll   (OLEDBプロバイダ)
  • sqlceqp35.dll    (クエリ・プロセッサ)
  • sqlcese35.dll    (ストレージ・エンジン)
  • System.Data.SqlServerCe.dll   (デスクトップ用のマネージ・プロバイダ)
  • ja\System.Data.SqlServerCe.resources.dll  (日本語用リソース)

 これらのファイルの再配布は、ライセンス規約の下で無償で行えます。ただし、実際に配布するには再配布権を取得する必要があります。これには、まずライセンス規約を読み、それに同意します(ライセンス規約はデフォルトでは「C:\Program Files\Microsoft SQL Server Compact Edition\v3.5」配下(以下、SQL Server Compact 3.5ディレクトリ)にある「EULA_JA.rtf」です。Web上からダウンロードするには「Microsoft:Register for SQL Server Compact 3.5 Redistribution Rights」を参照してください)。次に再配布権をMicrosoftに登録します。登録は「SQL Server Compact 3.5 redistribution rights」から行えます。この登録により、セキュリティ修正プログラムなどの情報がダイレクトに入手できるようになるので、迅速にクライアント環境をアップデート(=セキュリティ・パッチを適用)できるようになります。

 SQL Server Compact 3.5で再配布可能なファイルの一覧は、「REDIST_JPN.TXT」に記載されています。これらの再配布可能なファイルは、デフォルトではSQL Server Compact 3.5ディレクトリに格納されています。System.Data.SqlServerCe.dllファイルに関しては、デフォルトでは「Desktop」フォルダ内に、System.Data.SqlServerCe.resources.dllファイルに関しては、デフォルトでは「JA」フォルダに格納されています。

まとめ

 それではまとめです。

 まず、サンプル・アプリについて解説しました。今回のサンプル・アプリは、思いついたアイデアをしばらく忘れて保存しておきたい、という私の欲求をかなえるためのものでした。そして、このアプリでは、データの追加、表示などをSQL Server Compact 3.5のデータベース機能を利用して構築していることを述べました。

 次にSQL Server Compact 3.5について解説しました。最大の特徴として非常に小さなデータベース・エンジンである点を述べ、モバイル・アプリとしての可能性を考えました。そして、通常のSQL Serverシリーズとの違い、そのほかの特徴などを述べました。

 また、SQL Server Compact 3.5のデータベースの利用方法を述べました。Visual Studio 2008から利用するということがポイントでした。

 最後に、サンプル・アプリのソースについて解説しました。コード上から、データベースの作成が行えることがポイントでした。

 皆さんも、身近な課題をSQL Server Compact 3.5を活用したアプリを作ることで解決してみてはいかがでしょうか。きっと楽しいですよ。では、さようなら。End of Article

 

 INDEX
  [VB研読者向け 特別企画]
  ジョイ・オブ・プログラミング:SQL Server Compact 3.5
  極小SQL Server Compactでデータベース・アプリをお手軽作成
    1.お手軽Windowsデータベース・アプリのサンプル
    2.お手軽データベースの秘密:SQL Server Compact 3.5
  3.サンプル・アプリのソース解説

 ジョイ・オブ・プログラミング


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

注目のテーマ

業務アプリInsider 記事ランキング

本日 月間
ソリューションFLASH