Windows Azure Platform速習シリーズ:SQL Azure(後編)

SQL Azureを実際に活用する

Windows Azure Community 山本 昭宏 (監修 市川 龍太)
2010/01/22
Page1 Page2 Page3

SQL Azure Databaseの開発手法

 前提として、開発環境はVisual Studio 2008を想定しているが、Visual Studio 2010(ベータ2)でも同様の手順で動作することを確認済みである。

SQL Azure Databaseがサポートする接続ライブラリ、ドライバ

 まず、開発に必要となる接続ライブラリ、ドライバを説明する。現在、SQL Azure Databaseがサポートする接続ライブラリ、ドライバは以下の表のとおりである。

接続方式 ライブラリ、ドライバ 備考
ADO.NET(SQL Server) .NET Framework Data Provider for SQL Server .NET Framework 3.5 Service Pack 1以降に付属
ODBC SQL Server 2008 Native Client ODBCドライバ SQL Server Native Clientに付属
PHP SQL Server 2008 Driver for PHP version 1.1 ダウンロード・ページから取得する
SQL Azure Databaseがサポートする接続ライブラリ、ドライバ

 ADO.NETやODBCだけでなく、PHPからも接続可能であることに注目してほしい。

 本稿では接続ライブラリとして「.NET Framework Data Provider for SQL Server」を使用したデータベース・アプリケーションの開発手法を解説する。

ADO.NETのデータセットを使用したSQL Azure Databaseへの接続

 それでは実際にADO.NETのデータセットを使用して、SQL Azure Databaseに接続するデータベース・アプリケーションを作成していこう。

 データセットを使用したデータベース・アプリケーションは、すでによい意味で“枯れた”技術であり、既存の資産や知識が多くある。この資産や知識をSQL Azure Databaseで活用することができれば、既存のデータベース・アプリケーションを大きな手間をかけることなくSQL Azure Databaseに対応させられるだろう。

 ここでは先ほどSSMSで作成したテーブルの内容を一覧で表示するという簡単なコンソール・アプリケーションを作成する。

 さて、ここまでいっておきながら恐縮だが、残念ながら現在はVisual Studioのデータセット・デザイナでは、直接SQL Azure Databaseをデータ・ソースとしたデータセットを作成することはできない。具体的には新しいデータベースへの接続を作成する際、テスト接続までは成功するのだが、実際の作成時にエラーが発生してしまうのだ。

現在この問題に対し、以下の3つの回避策がある。

  • ローカルでSQL Azure Databaseと同じスキーマ構造のデータベースを作成してデータセットを作成し、接続文字列をSQL Azure Database用のものに書き換える
  • ODBCドライバで接続を行う。手順は「SQL Azure に Visual Studio から接続する(Masaki Iwata’s blog)」を参照されたい
  • 設定ファイル(〜.settings)でデータベース接続設定を作成する

 本稿では接続ライブラリとして「.NET Framework Data Provider for SQL Server」を使用するということで、最後の「設定ファイル(〜.settings)でデータベース接続設定を作成する」手順を説明する。

プロジェクトと設定ファイルの作成手順

 まず、コンソール・アプリケーション・プロジェクトを以下の手順で作成する。

(1)Visual Studioを起動し、メニューバーから[ファイル]−[新規作成]−[プロジェクト]を選択する。
(2)[新しいプロジェクト]ダイアログの[プロジェクトの種類]から[Visual C#]/[Visual Basic]を選択する。
(3)[テンプレート]から[コンソール アプリケーション]を選択する。
(4)[プロジェクト名][場所][ソリューション名]に任意の値(例:SQLAzureConnectionTest)を入力する。
(5)[OK]ボタンをクリックする。

 作成が完了すると以下の画面のような状態となる(C#の場合)。

コンソール・アプリケーション・プロジェクトの作成

 次に、設定ファイルを以下の手順で作成する。

(1)作成されたプロジェクトを右クリックし、表示されるコンテキスト・メニューから[追加]−[新しい項目]を選択する。
(2)[新しい項目の追加]ダイアログの[カテゴリ]から[Visual C# アイテム](C#の場合)/[共通項目]−[全般](VBの場合)を選択する。
(3)[設定ファイル]テンプレートを選択する。
(4)[ファイル名]に任意のファイル名(例:Settings.settings)を入力する。
(5)[追加]ボタンをクリックする。

 作成が完了すると以下の画面のような状態となる(C#の場合)。

設定ファイルの作成

 次に、WebブラウザでSQL Azureポータルにアクセスし、プロジェクトの一覧からプロジェクトを選択してSQL Azure Databaseのサーバ管理画面を表示する。そして以下の画面の手順でSQL Azure Databaseの接続文字列をコピーする。

データベースの選択
SQL Azure Databaseのサーバ管理画面を表示して、対象のデータベースを選択する。
  [Database]タブのデータベース一覧からADO.NETによる接続で作成したものを選択する。
  [Connection Strings]ボタンをクリックする。

 上の画面の手順により下の画面が表示されるので、[ADO.NET]の下に表示されている接続文字列をコピーする。

接続文字列の取得

 次に、データ接続設定を以下の手順で作成する。

(1)Visual Studioの画面に戻り、[ソリューション エクスプローラ]から先ほど作成した設定ファイル(Settings.settings)を(設定デザイナで)開く。
(2)データ接続設定を以下の画面の手順で作成する。

データ接続設定の作成
SQL Azure Databaseに接続するための接続文字列を設定デザイナで保存する
  [名前]に任意の接続文字列名(例:SQLAzureConnectionStinrg)を入力する。
  [型]で「(接続文字列)」を選択する。
  [スコープ]で「アプリケーション」を選択する。
  [値]にコピーした接続文字列を貼り付け、「myPassword」という部分をSQL Azure Databaseの管理ユーザーのパスワードに書き換える。
  [値]の右にある[...]ボタンをクリックして、[接続のプロパティ]画面を表示した後、[接続のプロパティ]ダイアログの[OK]ボタンをクリックし、データ接続設定の作成を完了させる

 データ接続設定の作成が完了すると、自動的にXML形式のアプリケーション構成ファイル(app.config)が作成され、入力内容に対応する接続文字列の要素が追加される。ここがポイントなのだが、データセット作成時の接続文字列の一覧には、構成ファイルの<connectionStrings>要素内の<add>要素のprovidorName属性に明示的に値が設定されている場合のみ表示される。

 [接続のプロパティ]画面から接続文字列を作成しないと、providorName属性が省略されてしまい、データセット作成時の接続文字列の一覧(下の画面を参照)に表示されなくなってしまう。

データセット作成時の接続文字列の一覧

 以上でデータ接続設定の準備は完了となる。正常にデータ接続設定が作成されていれば、アプリケーション構成ファイル(app.config)は以下のような状態になっているはずだ。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
  </configSections>
  <connectionStrings>
    <add name="SQLAzureConnectionTest.Settings.SQLAzureConnectionString"
      connectionString="Data Source=tcp: <サーバ名>.database.windows.net;Initial Catalog=TestDB;Integrated Security=False;User ID=<管理ユーザー名>;Password=<パスワード>;Encrypt=True"
      providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>
アプリケーション構成ファイル

データセットの作成手順

 次に、データセットを以下の手順で作成する。

(1)[ソリューション エクスプローラ]で先ほど作成したコンソール・アプリケーション・プロジェクトを右クリックして、表示されるコンテキスト・メニューから[追加]−[新しい項目]を選択する。
(2)[新しい項目の追加]ダイアログの[カテゴリ]から[Visual C# アイテム](C#の場合)/[共通項目]−[データ](VBの場合)を選択する。
(3)[テンプレート]から[データセット]を選択する。
(4)[ファイル名]に任意の値(例:TestDBDataSet.xsd)を入力する。
(5)[追加]ボタンをクリックする。

 作成が完了すると以下の画面のような状態となる(C#の場合)。

データセットの作成(1)

 次に、作成したデータセットにテーブルアダプタ(TableAdapter)を以下の手順で追加する。

(1)[ソリューション エクスプローラ]で作成したデータセットのファイルを開き、デザイナ領域を右クリックして、[追加]−[TableAdapter]を選択する。
(2)表示された[TableAdapter 構成ウィザード]の[データ接続の選択]ページで、[アプリケーションがデータベースへの接続に使用するデータ接続]に先ほど作成したデータ接続設定(SQLAzureConnectionStinrg)を指定し、[次へ]ボタンをクリックする。
(3)[SQL ステートメントの入力]ページで[テーブルに読み込むデータ]にクエリを入力する。

データセットの作成(2)

(4)[クエリ ビルダー]ボタンをクリックし、クエリの内容を確認する。クエリに何も入力しない状態で[クエリ ビルダー]ボタンをクリックするとエラー・メッセージが表示されてしまうので注意すること。

データセットの作成(3)

(5)[クエリ ビルダー]の[OK]ボタンをクリックして、[SQL ステートメントの入力]ページに戻る。
(6)最後に[SQL ステートメントの入力]ページの[完了]ボタンをクリックしてデータセットの作成は完了となる。

データセットを使用するコードの記述

 最後に、作成したデータセットを使用するコードを記述する。まず、[ソリューション エクスプローラ]の[Program.cs]/[Program.vb]ファイルを開き、内容を以下のコードで書き換える。

using System;
using System.Data.SqlClient;
using System.Data;

// 使用するTableAdapterの名前空間
using SQLAzureConnectionTest.TestDBDataSetTableAdapters;

namespace SQLAzureConnectionTest
{
  class Program
  {
    static void Main(string[] args)
    {
      // TableAdapterを作成する
      using (DataTable1TableAdapter tableAdapter =
        new DataTable1TableAdapter())
      {
        // T1テーブルのレコードを取得するGetDataメソッドを呼び出す
        using (TestDBDataSet.DataTable1DataTable dataTable1 =
          tableAdapter.GetData())
        {
          // レコードの数分ループする
          foreach (TestDBDataSet.DataTable1Row row in dataTable1)
          {
            // コンソールにカラムの値を出力する
            Console.WriteLine("Col1: {0}, Col2: {1}",
              row.Col1, row.Col2);
          }
        }
      }

      Console.WriteLine("何かキーを押すと終了します...");
      Console.ReadLine();
    }
  }
}
Imports System
Imports System.Data.SqlClient
Imports System.Data

' 使用するTableAdapterの名前空間
Imports SQLAzureConnectionTest.TestDBDataSetTableAdapters

Module Module1

  Sub Main()

    ' TableAdapterを作成する
    Using tableAdapter As New DataTable1TableAdapter()

      ' T1テーブルのレコードを取得するGetDataメソッドを呼び出す
      Using dataTable1 As TestDBDataSet.DataTable1DataTable = _
        tableAdapter.GetData()

        ' レコードの数分ループする
        For Each row As TestDBDataSet.DataTable1Row In dataTable1

          ' コンソールにカラムの値を出力する
          Console.WriteLine("Col1: {0}, Col2: {1}", _
                    row.Col1, row.Col2)
        Next

      End Using

    End Using

    Console.WriteLine("何かキーを押すと終了します...")
    Console.ReadLine()

  End Sub

End Module
Program.cs(上)/Program.vb(下)ファイル

 そして、[F5]キーを押して、デバッグ実行する。実行後、コンソールには以下のように表示される。

Col1: 1, Col2: string 1
Col1: 2, Col2: string 2
Col1: 3, Col2: 文字列 3
何かキーを押すと終了します...
実行結果

 この実行結果からSQL Azure Databaseのデータが取得されていることが確認できる。簡単な例ではあったが、接続文字列を変更することにより、既存のデータベース・アプリケーションとほぼ同じ手法でSQL Azure Databaseを使用したデータベース・アプリケーションを作成できることが分かるだろう。

 また、本稿では説明を省くが、同様に、ADO.NET Entity Frameworkのモデル作成も、事前に設定ファイルで作成したデータ接続設定を使用することにより、SQL Azure Databaseのテーブル・スキーマからエンティティ・モデルを生成可能である。

参考リンク

 実際にSQL Azure Databaseを使用する際に参考になる自習書、トレーニング・キット、コースのリンクを以下にまとめたので適宜参照してほしい。

まとめ

 これまでの解説から、開発の観点としては、SQL Azureの開発はいくつか制約はあるものの、これまでのSQL Serverと大きく変わらない手順で行うことが可能であると感じていただけたのではと思う。

 データベース管理者の観点としては、高可用環境の管理やソフトウェア・アップデートなどが自動化されるというメリットを生かしつつ、複数の制約を考慮に入れた運用を行う必要があるだろう。現状ではまだSQL Azure Databaseの運用に関するベスト・プラクティスと呼べるものは存在しないので、地道にノウハウをためていく必要があるだろう。

 SQL Azureを含むWindows Azure Platformの商用サービスの開始スケジュールは以下のとおりである。残すところあとわずかだが、1月末日までは課金されないので、ぜひアカウントを登録して、試してみてほしい。

期間 備考
2010年1月初日〜2010年1月末日 無料。商用利用時の課金シミュレーションなどを行う。
2010年2月初日 以降 課金開始
Windows Azure Platformのサービスのスケジュール

 さて、本稿で解説してきたことは「速習 SQL Azure」というタイトルにもあるとおり、説明は概要にとどめ、SQL Serverとの互換性に主眼を置いて、既存の知識や資産をどのように生かすかといったことを主に扱った。

 しかし、前編で紹介した追加予定機能の、分散トランザクション、分散クエリ、各種スケールアウト機能や、“Velocity”のコードネームで呼ばれる分散キャッシュ技術との連携機能などから、従来のSQL Serverとの互換性だけでなく、これまで比較的特殊な領域だった大規模分散処理機能をSQL Azure Databaseが強く意識していることがうかがえる。

 さらに、Key-Value形式で大規模分散処理へ対応したWindows Azureテーブル・ストレージとのデータ連携や、大規模分散処理機能によるプライベート・クラウド機能を提供するとされるSQL Server 2008 R2と連携する機会も増えていくだろう。

 Windows Azure Platform自体はその姿を見せ始めたばかりで、実際の導入や、上記の大規模分散処理の実現にはさまざまな試行錯誤が求められると思う。本稿がこういった試行錯誤を少しでも減らし、SQL Azureを含めたWindows Azure Platform活用への足掛かりとなれば幸いである。End of Article

謝辞

 本稿を執筆するに当たり、有益な情報の提供とアドバイスをしてくださった、砂金 信一郎氏と西崎 公太氏の両氏に感謝の意を表させていただきたい。

 

 INDEX
  Windows Azure Platform速習シリーズ:SQL Azure(前編) 
  SQL Azureの機能と制約を理解する
    1.SQL Azureの概要と特徴/SQL Azure Databaseの制約
    2.SQL Azure Databaseに今後追加される機能の予定/料金体系とSLA
 
  Windows Azure Platform速習シリーズ:SQL Azure(後編)
  SQL Azureを実際に活用する
    1.SQL Azureの契約とSQL Azure Databaseの準備
    2.SQL Server Management StudioによるSQL Azure Databaseの操作
  3.SQL Azure Databaseの開発手法

インデックス・ページヘ  「Windows Azure Platform速習シリーズ」
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メールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

キャリアアップ

.NET未来展望台

未来展望台コーナースポンサーからのお知らせ


- PR -
- PR -
ソリューションFLASH

「ITmedia マーケティング」新着記事

SEOは総合格闘技である――「SEOおたく」が語る普遍のマインド
SEOの最新情報を発信する「SEOおたく」の中の人として知られる著者が、SEO担当者が持つべ...

HubSpot CMSにWebサイトの「定石」を実装 WACUL×100のパッケージ第1弾を提供開始
WACULと100は共同で、Webサイトの「定石」をHubSpotで実装する「Webサイト構築パッケージ...

電通調査で「料理は面倒」が6割超 なぜそうなった?
電通の国内電通グループ横断プロジェクト「電通 食生活ラボ」は、「食生活に関する生活者...