SQL Server Compact Edition を使用するモバイル アプリケーションの作成

このチュートリアルでは、Microsoft Visual Studio 2005 で、Microsoft SQL Server 2005 Compact Edition を使用するアプリケーションを作成する方法について学習します。ここでは、SQL Server Compact Edition データベースが SQL Server 2005 のパブリケーションに対するサブスクライバとなり、マージ レプリケーションを使用して、SQL Server 2005 データベースから SQL Server Compact Edition データベースに情報をダウンロードします。

このチュートリアルでは、次の手順を実行します。

  1. SQL Server 2005 パブリケーションを構成します。
  2. レプリケーション用にインターネット インフォメーション サービス (IIS) を構成します。
  3. SQL Server Compact Edition サブスクリプションを作成します。
  4. アプリケーションを作成します。
  5. アプリケーションを配置し、サブスクリプションをテストします。

前提条件

このチュートリアルの執筆時点で、実行に必要な環境は以下のとおりです。

  • Windows XP と IIS がインストールされたコンピュータ
  • Visual Studio と同じコンピュータ上に、SQL Server 2005 Service Pack 2 (SP2) 以降

SQL Server 2005 での作業

アプリケーションを作成する前に、SQL Server 2005 にパブリケーションを構成する必要があります。次の手順でサンプル データベースを作成し、そのデータベースからデータをパブリッシュします。事前にビルドしたスクリプト ファイルを使用してデータベースを作成し、パブリケーションの新規作成ウィザードでパブリケーションを作成します。

データベースの作成とデータの格納

  1. SQL Server Management Studio を開きます。

  2. サーバーに接続するよう要求されたら、[サーバー名] に「(local)」と入力し、[接続] をクリックします。

  3. 新しいクエリ ウィンドウを開きます。SQL Server Compact Edition データベースを作成し、作成したデータベースにデータを格納します。

    USE master;
    GO
    IF EXISTS (SELECT * FROM sys.sysdatabases WHERE name = 'SQLMobile') 
    BEGIN
        DROP Database SQLMobile;
    END
    GO
    CREATE DATABASE SQLMobile;
    GO
    USE SQLMobile;
    GO
    CREATE TABLE MembershipData (MemberID INTEGER IDENTITY (1,1) 
        CONSTRAINT pkMemberID PRIMARY KEY, MemberName NVarChar (50));
    CREATE TABLE FlightData (MemberID INTEGER FOREIGN KEY REFERENCES 
        MembershipData(MemberID), Destination NVarChar (50), FlightStatus 
        NVarChar(50), ArrivalDate DATETIME, FlownMiles INTEGER);
    INSERT INTO MembershipData (MemberName) VALUES ('Mr Don Hall');
    INSERT INTO MembershipData (MemberName) VALUES ('Mr Jon Morris');
    INSERT INTO MembershipData (MemberName) VALUES ('Ms TiAnna Jones');
    INSERT INTO FlightData (MemberID, Destination, FlightStatus, ArrivalDate, FlownMiles) 
        VALUES (1, 'Seattle', 'Flight Delayed 1 hour', '8/25/00', '20000');
    INSERT INTO FlightData (MemberID, Destination, FlightStatus, ArrivalDate, FlownMiles) 
        VALUES (2, 'London', 'Flight on time', '9/12/00', '15000');
    INSERT INTO FlightData (MemberID, Destination, FlightStatus, ArrivalDate, FlownMiles) 
        VALUES (3, 'Sydney', 'Flight Gate Closing', '11/5/00', '30000');
    INSERT INTO FlightData (MemberID, Destination, FlightStatus, ArrivalDate, FlownMiles) 
        VALUES (1, 'Tokyo', 'Delayed Fog', '5/25/00', '25000');
    INSERT INTO FlightData (MemberID, Destination, FlightStatus, ArrivalDate, FlownMiles) 
        VALUES (2, 'Minneapolis', 'Flight on time', '5/1/00', '1000');
    INSERT INTO FlightData (MemberID, Destination, FlightStatus, ArrivalDate, FlownMiles) 
        VALUES (3, 'Memphis', 'Flight Gate Closing', '1/5/00', '1000');
    GO
    
  4. [実行 (!)] をクリックしてスクリプトを実行し、データベースを作成します。スクリプトが実行され、SQLMobile という名前の新しいデータベースが作成されます。

    メモ :
    F5 キーを押すか、[クエリ] メニューの [実行] をクリックしてクエリを実行できます。
  5. データベースが作成されたことを確認するには、オブジェクト エクスプローラで [(local)]、[データベース]、[SQLMobile] の順に展開します。SQLMobile データベースが表示されない場合は、[データベース] を右クリックして [更新] をクリックし、データベースの一覧を更新します。

データをパブリッシュするためのサーバーの準備

パブリケーションを作成する前に、スナップショット エージェント ユーザー アカウントを作成し、スナップショット ファイルを保存するための共有フォルダを作成することで、パブリッシュ用にサーバーを準備しておく必要があります。スナップショット フォルダを作成すると、そのフォルダがサーバーのすべてのパブリケーションで使用されます。このサーバーにパブリケーションを既に作成してある場合、以下の手順は省略できます。

スナップショット ユーザー アカウントの作成

  1. コントロール パネルの [管理ツール] から [コンピュータの管理] を開きます。

  2. [コンピュータの管理] で、[システム ツール] を展開し、[ローカル ユーザーとグループ] を展開します。[ユーザー] を右クリックして、[新しいユーザー] をクリックします。

  3. [新しいユーザー] ダイアログ ボックスに次の情報を入力し、[作成] をクリックします。

フィールド

ユーザー名

snapshot_agent

パスワード

p@ssw0rd

パスワードの確認入力

p@ssw0rd

ユーザーは次回ログオン時にパスワードの変更が必要

選択しません

パスワードを無期限にする

選択します

重要 :
上記の設定は、テストにのみ使用してください。運用環境では、ユーザー アカウントの設定がネットワークのセキュリティ要件を満たしていることを確認してください。多くの場合、スナップショット エージェントにはローカル ユーザー アカウントではなく、ドメイン ユーザー アカウントを使用します。

snapshot フォルダの作成

  1. Windows エクスプローラで、snapshot という名前の新しいフォルダを作成します。このチュートリアルでは、c:\snapshot のようにドライブ C のルート ディレクトリにフォルダを作成できます。snapshot フォルダを右クリックし、[共有とセキュリティ] をクリックします。

  2. [共有] タブで [このフォルダを共有する] をクリックして、[アクセス許可] をクリックします。

  3. [snapshot のアクセス許可] の [追加] をクリックします。

  4. [選択するオブジェクト名を入力してください] に「computername\snapshot_agent」 (computername はローカル コンピュータの名前) と入力し、[名前の確認] をクリックして、[OK] をクリックします。

  5. [snapshot のアクセス許可] で [snapshot_agent] をクリックし、[変更] と [読み取り] の共有アクセス許可を割り当て、[OK] をクリックします。

  6. [セキュリティ] タブをクリックします。

  7. [追加] をクリックします。

  8. [選択するオブジェクト名を入力してください] に「computername\snapshot_agent」 (computername はローカル コンピュータの名前) と入力し、[名前の確認] をクリックして、[OK] をクリックします。

  9. [snapshot_agent] をクリックし、アクセス許可の一覧に [書き込み] 権限を追加します。この時点で snapshot_agent アカウントには次の権限が与えられています。

    • 読み取りと実行
    • フォルダの内容の一覧表示
    • 読み取り
    • 書き込み
  10. [OK] をクリックして、[snapshot のプロパティ] ウィンドウを閉じます。

  11. エクスプローラを閉じます。

パブリケーションの作成

  1. SQL Server Management Studio のオブジェクト エクスプローラで、[(local)] ノードが展開されていない場合は展開し、次に [レプリケーション] を展開します。

  2. [ローカル パブリケーション] フォルダを右クリックし、[新しいパブリケーション] をクリックします。

  3. パブリケーションの新規作成ウィザードの最初の画面で、[次へ] をクリックします。

  4. これまでにこのコンピュータにパブリケーションを作成していない場合、ディストリビュータを構成するよう求められます。このパブリケーション用のディストリビュータとしてローカル コンピュータを使用する場合、最初のオプションを選択し、[次へ] をクリックします。

  5. これまでにこのコンピュータにパブリケーションを作成していない場合、スナップショット フォルダを指定するよう求められます。前の手順で作成したスナップショット フォルダの共有パスを入力します。共有パスは、ローカル パスではなく、\\servername\share**という形式で入力します。このチュートリアルでは、「\\computer\snapshot」 (computer は使用しているコンピュータの名前) と入力し、[次へ] をクリックすることを推奨します。

  6. データベースの一覧で、[SQLMobile] を選択し、[次へ] をクリックします。

  7. パブリケーションの種類の一覧で、[マージ パブリケーション] を選択し、[次へ] をクリックします。

  8. [サブスクライバの種類] ページで、[はい] をクリックして SQL Server Compact Edition サブスクライバのサポートを有効にし、[次へ] をクリックします。

  9. パブリッシュするオブジェクトの一覧で、[テーブル] チェック ボックスをオンにします。[テーブル] を展開すると、SQLMobile データベースの両方のテーブルが選択されていることがわかります。[次へ] をクリックします。

  10. 一意識別子がテーブルに追加されることが通知されます。すべてのマージ アーティクルには、uniqueindentifier 列が必要です。[次へ] をクリックします。

  11. [テーブル行のフィルタ選択] ページで、パブリッシュされたデータにフィルタを追加できます。このチュートリアルではデータをフィルタ選択しません。[次へ] をクリックします。

  12. [スナップショット エージェント] ページで、いつスナップショットを作成するか、およびスナップショット エージェントの実行頻度を設定できます。既定の設定をそのまま使用する場合、[次へ] をクリックします。

  13. [エージェント セキュリティ] ダイアログ ボックスで、[セキュリティ設定] をクリックします。

    1. [スナップショット エージェントのセキュリティ] ダイアログ ボックスで、前の手順で作成したアカウントのログオン情報を入力します。プロセス アカウントは computer_name\snapshot_agent (computer_name は使用しているコンピュータの名前) で、パスワードは p@ssw0rd です。
    2. [OK] をクリックして設定を保存します。
    3. [エージェント セキュリティ] ページで、[次へ] をクリックします。
  14. [ウィザードのアクション] 画面で、いつパブリケーションを作成するか、スクリプト ファイルを作成するかどうかを指定できます。[スナップショットをすぐに作成する] をオフにして、[次へ] をクリックします。

  15. [ウィザードの完了] 画面で、パブリケーションの名前を「SQLMobile」と入力し、[完了] をクリックします。

  16. パブリケーションが作成されます。ウィザードが終了したら、[閉じる] をクリックします。

権限の設定

スナップショット エージェント アカウントと IIS 匿名ユーザー アカウントに権限を許可する必要があります。また、IIS 匿名ユーザー アカウントをパブリケーション アクセス リスト (PAL) に追加する必要もあります。

データベース権限の設定

  1. SQL Server Management Studio のオブジェクト エクスプローラで、[セキュリティ] を展開し、[ログイン] を右クリックして、[新しいログイン] をクリックします。

  2. [新しいログイン] ダイアログ ボックスで、[Windows 認証] を選択し、[検索] をクリックします。次に、[選択するオブジェクト名を入力してください] ボックスに「computername\snapshot_agent」 (computername は使用しているコンピュータの名前) と入力し、[名前の確認] をクリックして、[OK] をクリックします。

  3. ナビゲーション ペインの [ユーザー マッピング] ペインを選択します。

  4. データベースの一覧から [distribution] と [db_owner] ロール、[SQLMobile] と [db_owner] ロールを選択して、[OK] をクリックします。

  5. [ログイン] を右クリックして、[新しいログイン] をクリックします。

  6. [新しいログイン] ダイアログ ボックスで、[Windows 認証] をクリックし、[検索] をクリックします。次に、[選択するオブジェクト名を入力してください] ボックスに「computername\iusr_computername」 (computername は使用しているコンピュータの名前) と入力し、[名前の確認] をクリックして、[OK] をクリックします。

  7. ナビゲーション ペインの [ユーザー マッピング] ペインを選択します。

  8. データベースの一覧で、[distribution] および [SQLMobile] を選択し、[OK] をクリックします。

パブリケーションのアクセス許可

  1. オブジェクト エクスプローラで、[レプリケーション]、[パブリケーション] の順に展開し、[[SQLMobile]:SQLMobile] パブリケーションを右クリックして、[プロパティ] をクリックします。

  2. ナビゲーション ペインで [パブリケーション アクセス リスト] を選択します。

  3. [追加] をクリックします。[パブリケーション アクセスの追加] ダイアログ ボックスに IUSR アカウントが表示されます。表示された IUSR アカウントを選択し、[OK] をクリックします。

  4. IUSR アカウントが PAL に含まれていることを確認し、[OK] をクリックします。

パブリケーションのスナップショットの作成

SQLMobile パブリケーションへのサブスクリプションを初期化するには、先にパブリケーションのスナップショットを作成する必要があります。

パブリケーションのスナップショットの作成

  1. SQL Server Management Studio のオブジェクト エクスプローラで、[(local)] コンピュータ ノードを展開します。

  2. [ローカル パブリケーション] フォルダを展開し、パブリケーション名を選択した後、[SQLMobile] を右クリックし、[スナップショット エージェントの状態の表示] をクリックします。

  3. [スナップショット エージェントの状態の表示] ダイアログ ボックスで、[開始] をクリックします。

    スナップショットの処理が成功したことを確認してから次に進んでください。

Web 同期用の IIS と SQL Server 2005 の構成

SQL Server のパブリケーションが構成された後は、SQL Server Compact Edition クライアントがネットワーク経由でパブリケーションにアクセスできるようにする必要があります。SQL Server Compact Edition から SQL Server への接続には、IIS が使用されます。具体的な作業としては、クライアントが SQL Server Compact Edition サーバー エージェントにアクセスできるようにするための仮想ディレクトリを作成し、構成します。

SQL Server Compact Edition サーバー コンポーネントのインストール

  1. Windows エクスプローラで、次のディレクトリに移動します。

    C:\Program Files\Microsoft SQL Server\90\Tools\Binn\VSShell\Common7\IDE

  2. sqlce30setupja.msi をダブルクリックして、インストール プログラムを実行します。

  3. セットアップ ウィザードの最初の画面で、[次へ] をクリックします。

  4. Microsoft ソフトウェア使用許諾契約を読んで同意し、[次へ] をクリックします。

  5. [システム構成チェック] 画面のすべての項目が合格することを確認します。SQL Server 2000 がインストールされていない場合、一覧の最後の項目が警告として表示されます。しかし SQL Server 2005 を使用しているので、問題はありません。[次へ] をクリックします。

  6. 次の画面の [次へ] をクリックし、[インストール] をクリックして、インストールを開始します。

  7. [完了] をクリックします。

Web 同期用のパブリケーションの構成

  1. SQL Server Management Studio のオブジェクト エクスプローラで、[(local)] コンピュータ ノードを展開します。

  2. [ローカル パブリケーション] フォルダを展開し、パブリケーション名を選択した後、右クリックして [Web 同期の構成] をクリックします。

  3. ウィザードの最初の画面で、[次へ] をクリックします。

  4. [サブスクライバの種類] 画面で [SQL Server Compact Edition] を選択し、[次へ] をクリックします。

  5. [Web サーバー] 画面の [IIS を実行しているコンピュータの名前の入力] ボックスが空白の場合は使用しているコンピュータの名前を入力し、[新しい仮想ディレクトリを作成する] をクリックします。

  6. 表示されるツリーで、コンピュータを展開し [Web サイト] を展開して、[既定の Web サイト] をクリックします。

  7. [次へ] をクリックします。

  8. [仮想ディレクトリ情報] 画面で、[別名] ボックスに「SQLMobile」と入力し、[次へ] をクリックします。

    警告ダイアログ ボックスが表示されたら、[はい] をクリックします。

  9. [セキュリティで保護された通信] 画面で [セキュリティで保護されたチャネル (SSL) を要求しない] を選択します。

  10. 重要   運用環境では、サブスクライバと IIS 実行サーバーの間でインターネットを経由して交換されるデータを保護するため、SSL 暗号化を有効にする必要があります。これには [クライアント認証] 画面で [クライアントから SQL Server に匿名で接続されます。] を選択し、[次へ] をクリックします。

  11. [匿名アクセス] 画面で、[次へ] をクリックして既定の設定をそのまま使用します。

  12. [スナップショットの共有へのアクセス] 画面で、「\\computer\snapshot」 (computer は使用しているコンピュータの名前) と入力し、[次へ] をクリックします。

    スナップショット共有が空だという警告が表示された場合、[はい] をクリックします。

  13. [完了] をクリックします。

  14. [閉じる] をクリックします。

  15. Internet Explorer で、[アドレス] に URL 「http://localhost/SQLMobile/sqlcesa30.dll?diag」を入力し、[移動] をクリックします。これで、診断モードでサーバーに接続されます。SQL Server Compact Edition サーバー エージェントの診断レポートに成功が示されていることを確認してください。

SQL Server Compact Edition での作業

SQL Server Compact Edition を使用するアプリケーションを開発する前に、あらかじめ SQL Server Compact Edition のデータベースとサブスクリプションを作成しておくと、多くの場合時間の節約になります。SQL Server Management Studio を使用すると、ローカル コンピュータの SQL Server Compact Edition データベースを作成および操作できます。このデータベースはアプリケーションの開発時に使用できます。

新しい SQL Server Compact Edition データベースの作成

  1. SQL Server Management Studio のオブジェクト エクスプローラで、[接続] をクリックし、[SQL Server Compact Edition] を選択します。

  2. [データベース ファイル] の [<新しいデータベース...>] を選択します。

  3. ファイル名ボックスに「c:\sqlmobile.sdf」と入力し、[OK] をクリックします。

    空白のパスワードに関する警告が表示された場合は [はい] をクリックします。このチュートリアルのデータベースには、パスワードによる保護や暗号化は行われていません。

  4. [サーバーへの接続] ダイアログ ボックスで [接続] をクリックします。

    オブジェクト エクスプローラに、[SQL Server Compact Edition [マイ コンピュータ\...\sqlmobile]] という新しいノードが追加されます。

新しいサブスクリプションの作成

  1. オブジェクト エクスプローラで、[SQL Server Compact Edition] ノードを展開し、[レプリケーション] を展開します。次に [サブスクリプション] を右クリックし、[新しいサブスクリプション] をクリックします。

  2. 最初の画面で、[次へ] をクリックします。

  3. [パブリケーションの選択] 画面で、[パブリッシャ] ドロップダウン リストの [<SQL Server パブリッシャの検索...>] をクリックします。

  4. [サーバーへの接続] ダイアログ ボックスで、ローカル コンピュータの名前を入力するか選択して、[接続] をクリックします。

  5. [パブリケーションの選択] 画面のパブリケーションの一覧で、[SQLMobile] を展開し、[SQLMobile] パブリケーションを選択して、[次へ] をクリックします。

  6. [サブスクリプションの識別] 画面で、サブスクリプション名を「SQLMobile」と入力し、[次へ] をクリックします。

  7. [Web サーバー認証] 画面で、前の手順で作成した仮想ディレクトリの URL を入力します。このチュートリアルでは、http://localhost/SQLMobile という URL の仮想ディレクトリを作成しています。

  8. [サブスクライバは匿名で接続します。] をクリックし、[次へ] をクリックします。

  9. [SQL Server 認証] 画面で、[次へ] をクリックして既定の設定をそのまま使用します。

    最後の画面に、サブスクリプションをアプリケーションで作成するときに使用できるサンプル コードが表示されます。サンプル コード (アプリケーションを作成するときに使用する言語に応じて、Visual Basic または C# のいずれか) を選択して、コードをコピーします。コピーするにはコードを選択し、Ctrl キーを押しながら C キーを押します。その後、メモ帳または別のテキスト エディタを起動し、サンプル コードを貼り付けます。アプリケーションを作成するときは、以下の手順でこのコードを使用します。

  10. サンプル コードをコピーした後に、[完了] をクリックします。

  11. [閉じる] をクリックします。

アプリケーションのビルド

新しいスマート デバイス プロジェクトの作成

  1. Visual Studio 2005 を開きます。

  2. [ファイル] メニューの [新しいプロジェクト] をクリックします。

  3. [新しいプロジェクト] ダイアログ ボックスの [プロジェクトの種類] ツリーで、使用する開発言語を展開し、[スマート デバイス] を選択します。

  4. テンプレートの一覧から、作成するプロジェクトの種類を選択します。このチュートリアルでは、[Pocket PC 2003 アプリケーション] を選択します。

  5. プロジェクトの名前と場所を指定し、[OK] をクリックします。このチュートリアルでは、プロジェクト名を「SQLMobile」と付けます。

    Visual Studio で新しいプロジェクトが作成され、Form1 が表示されます。スマート デバイスにも Form1 と表示されます。

参照の追加

  1. ソリューション エクスプローラで、[参照設定] を右クリックし、[参照の追加] をクリックします。

    メモ :
    ソリューション エクスプローラに [参照設定] フォルダが表示されていない場合は、ソリューション エクスプローラの上部の [すべてのファイルを表示] をクリックします。
  2. .NET アセンブリの一覧で [System.Data.SqlServerCe] をクリックし、[OK] をクリックします。System.Data.SqlServerCe が表示されない場合、次の手順を実行します。

    1. [参照] タブをクリックします。
    2. 次のディレクトリに移動します。
      C:\Program Files\Microsoft Visual Studio 8\Common7\IDE
    3. [System.Data.SqlServerCe.dll] をクリックし、[OK] をクリックします。

    ソリューション エクスプローラの参照設定の一覧に System.Data.SqlServerCe が追加され、このアセンブリをプロジェクトで使用できるようになりました。

  3. ソリューション エクスプローラで [Form1.cs] または [Form1.vb] を右クリックし、[コードの表示] をクリックします。

  4. フォームのコードの先頭に System.Data.SqlServerCe 名前空間を使用するディレクティブを追加します。

    [C#]

    using System.Data.SqlServerCe;
    

    [VB]

    Imports System.Data.SqlServerCe
    

データ接続の追加

  1. メイン ウィンドウを Form1 のデザイン (既定の) ビューに戻します。

  2. [データ] メニューの [新しいデータ ソースの追加] をクリックします。

    注   [新しいデータ ソースの追加] が表示されていない場合、Form1 のデザイン ビューを選択してから、再度 [データ] メニューを表示します。

  3. [データ ソースの種類を選択] ウィンドウで [データベース] を選択し、[次へ] をクリックします。

  4. [データ接続の選択] ダイアログ ボックスで、[新しい接続] をクリックします。

  5. [接続の追加] ダイアログ ボックスが表示された場合は、[変更] をクリックします。

  6. [データ ソースの選択] ダイアログ ボックスで、[データ ソース] の下にある [Microsoft SQL Server Compact Edition] を選択します (既存の接続があった場合、このダイアログ ボックスの名前は [データ ソースの変更] となります)。データ プロバイダの一覧の [.NET Framework Data Provider for SQL Server Compact Edition] を選択します。[続行] または [OK] をクリックします。

  7. [接続の追加] ダイアログ ボックスで、[データ ソース] の下にある [マイ コンピュータ] を選択します。

    [接続のプロパティ] セクションの [データベース] で、[参照] をクリックし、前の手順で作成したデータベースの場所を指定します。上記の手順に従っていれば、データベースは c:\sqlmobile.sdf にあります。

  8. [テスト接続] をクリックし、[OK] をクリックすると、新しいデータ接続が作成されます。

  9. [データ接続の選択] ダイアログ ボックスで、[次へ] をクリックします。

  10. 現在のプロジェクトにデータ ファイルをコピーするよう求めるダイアログ ボックスが表示された場合は、[はい] をクリックします。

  11. [接続文字列の保存] ウィンドウで、[次へ] をクリックします。

  12. [データベース オブジェクトの選択] ウィンドウで [テーブル] を選択し、[完了] をクリックします。

表示するデータの選択

  1. [データ] メニューの [データ ソースの表示] をクリックします。

  2. [データ ソース] ウィンドウから [Form1 デザイン] ウィンドウに [MembershipData] テーブルをドラッグします。Form1 に自動的に列名が埋め込まれたデータグリッドが作成されます。

  3. データグリッドを右クリックし、[プロパティ] をクリックします。

  4. [プロパティ] ウィンドウの Dock の値を Top に変更します。表示されているグラフィック表示の上側のバーをクリックするか、または値フィールドに「Top」と入力するかのいずれかで、この変更を実行できます。データグリッドが Form1 の最上部に密着するように、移動およびサイズ変更が行われます。

  5. データグリッドの右上にある小さな矢印をクリックします。表示されるメニューから、[データ フォームを生成します] を選択します。

  6. [データ ソース] ウィンドウから [Form1 デザイン] ウィンドウに [FlightData] テーブルをドラッグします。Form1 に自動的に列名が埋め込まれたデータグリッドが作成されます。

  7. このデータグリッドの [プロパティ] 設定で、Dock プロパティを Bottom に設定できます。

コードの追加

アプリケーションのコード ページでは、データベース ファイルのパスと名前を保持する文字列変数を追加したり、データベース ファイルが既に存在している場合にそのファイルを削除するコードを追加したり、SQL Server パブリケーションとの接続を確立してデータを同期し、そのデータを使って新しいローカル データベースを作成するコードを追加したりすることができます。

コードの追加

  1. ソリューション エクスプローラで、[Form1] を右クリックして [コードの表示] をクリックします。

  2. コード ページで、Form1 のクラス定義を探します。文字列変数を追加し、その変数に .sdf ファイルのパスとファイル名を割り当てます。前の手順で Visual Studio によって作成されたデータ ソースでは、データベース ファイルが \Program Files\ApplicationName フォルダに格納されていることを想定しています (ApplicationName はアプリケーションの名前です)。たとえば、新しいプロジェクトに SQLMobile という名前を付けた場合は、文字列変数を "\Program Files\SQLMobile\sqlmobile.sdf" に設定する必要があります。

  3. クラス定義の最初の数行は、次のようなコードになります。

    [C#]

    public partial class Form1 : System.Windows.Forms.Form
    {
       private System.Windows.Forms.MainMenu mainMenu1;
       string filename = @"\Program Files\SQLMobile\sqlmobile.sdf";
    
       public Form1()
       {
          InitializeComponent();
       }
    

    [Visual Basic]

    Public Class Form1
    
        Dim filename As New String _
          ("\Program Files\SQLMobile\sqlmobile.sdf")
    
  4. データベース ファイルが既に存在している場合は、そのデータベースを削除する新しいメソッドを作成します。こうすると、アプリケーションを実行するたびに最新のデータが確実に読み込まれるようになります。このメソッドには、DeleteDB という名前を付けます。コードは次のようになります。

    [C#]

    private void DeleteDB()
    {
       if (System.IO.File.Exists(filename)) 
       {
          System.IO.File.Delete(filename);
       }
    }
    

    [Visual Basic]

    Sub DeleteDB()
       If System.IO.File.Exists(filename) Then
          System.IO.File.Delete(filename)
       End If
    End Sub
    
  5. Sync という名前の同期を実行する新しいメソッドを作成します。これを作成するには、前の手順でパブリケーションの新規作成ウィザードからコピーしたコードを使用します。コードを貼り付けるときは、次の 2 つの部分の変更が必要です。

    1. SubscriberConnectionString 値を変更し、ファイル名変数の指定に従って正しいパスとファイル名を指すようにします。

    2. AddOption 値を ExistingDatabase から CreateDatabase に変更します。
      最終的に Sync メソッドは次のようになります。
      [C#]

      private void Sync()
      {
         SqlCeReplication repl = new SqlCeReplication();
      
         repl.InternetUrl = @"http://<computername>/sqlmobile/sqlcesa30.dll";
         repl.Publisher = @"<computername>";
         repl.PublisherDatabase = @"SQLMobile";
         repl.PublisherSecurityMode = SecurityType.NTAuthentication;
         repl.Publication = @"SQLMobile";
         repl.Subscriber = @"SQLMobile";
         repl.SubscriberConnectionString = @"Data Source='" + filename + 
           "';Password='';Max Database Size='128';Default Lock Escalation 
           ='100';";
         try
         {
            repl.AddSubscription(AddOption. CreateDatabase);
            repl.Synchronize();
         }
         catch (SqlCeException e)
         {
            MessageBox.Show(e.ToString());
         }
      }
      

      [Visual Basic]

      Sub Sync()
         Dim repl As New SqlCeReplication()
         repl.InternetUrl = "http://<computername>/SQLMobile/sqlcesa30.dll"
         repl.Publisher = "<computername>"
         repl.PublisherDatabase = "SQLMobile"
         repl.PublisherSecurityMode = SecurityType.NTAuthentication
         repl.Publication = "SQLMobile"
         repl.Subscriber = "SQLMobile"
         repl.SubscriberConnectionString = _
            "Data Source='" + filename + "';Password='';" _ 
            & "Max Database Size='128';Default Lock Escalation ='100';"
         try
            repl.AddSubscription(AddOption. CreateDatabase) 
            repl.Synchronize() 
         catch err as SqlCeException
            MessageBox.Show(err.ToString)
         end tryEnd Sub
      
  6. 最後に、作成した 2 つのメソッドを呼び出すコードを Form1_Load イベント ハンドラの先頭に追加します。Form1_Load イベント ハンドラは次のようになります。

    [C#]

    private void Form1_Load(object sender, EventArgs e)
    {
       DeleteDB();
       Sync();
    
    // TODO: Delete this line of code.
       this.flightDataTableAdapter.Fill(this.sqlmobileDataSet.FlightData);
    // TODO: Delete this line of code.
       this.membershipDataTableAdapter.Fill(this.sqlmobileDataSet.MembershipData);
    }
    

    [Visual Basic]

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       DeleteDB()
       Sync()
    
       'TODO: Delete this line of code.
       Me.FlightDataTableAdapter.Fill(Me.SqlmobileDataSet.FlightData)
       'TODO: Delete this line of code ...
       Me.MembershipDataTableAdapter.Fill(Me.SqlmobileDataSet.MembershipData)
    End Sub
    

アプリケーションの配置とテスト

アプリケーションの配置

  1. [デバッグ] メニューの [デバッグ開始] をクリックします。

  2. [配置] ダイアログ ボックスが表示された場合は、[Pocket PC 2003 SE エミュレータ] を選択し、[配置] をクリックします。

  3. エミュレータが新しいウィンドウで開きます。アプリケーションをエミュレータに最初に配置するときに、.NET Compact Framework と SQL Server Compact Edition がインストールされます。この処理には、数分かかる場合があります。2 つのプログラムがインストールされると、アプリケーションがインストールされ、実行されます。

    2 つのデータグリッドが読み込まれて表示されます。MembershipData データグリッドの値をクリックすると、FlightData データグリッドのデータが自動的に更新されます。

  4. アプリケーションを閉じ、Visual Studio で、[デバッグ] メニューの [デバッグの停止] をクリックします。

参照

概念

データベースのセキュリティ設定 (SQL Server Compact Edition)

ヘルプおよび情報

SQL Server Compact Edition のサポートについて