ADO.NET および SQL Anywhere .NET Data Provider を使用した SQL Anywhere データベースへの接続

はじめに

SQL Anywhere .NET Data Provider を使用すれば、お客様が管理している .NET アプリケーションから SQL Anywhere データベースへのアクセスを統合および標準化できます。この方法でデータベースへの ADO.NET 接続を確立することをおすすめします。

必要なソフトウェア

このチュートリアルは SQL Anywhere 11.0.0 以降用に作成されたものですが、それ以前のバージョンや今後のリリースにも内容があてはまる場合があります。

  • SQL Anywhere
  • SQL Anywhereサンプル・データベース (demo.db)
  • Microsoft Visual Studio 2008

SQL Anywhere Data Provider

SQL Anywhere は、以下のネームスペースを使用して Microsoft .NET Framework をサポートしています。

iAnywhere.Data.SQLAnywhere

ADO.NET オブジェクト・モデルは、万能型のデータ・アクセス・モデルです。ADO.NET コンポーネントは、データ操作からデータ・アクセスを要素化するために設計されました。そのため、ADO.NET には DataSet と .NET Framework Data Provider という 2 つの中心的なコンポーネントがあります。.NET Framework Data Provider は、Connection、Command、DataReader、および DataAdapter オブジェクトからなるコンポーネントのセットです。SQL Anywhere には、OLE DB または ODBC のオーバヘッドを加えずに SQL Anywhere データベース・サーバと直接通信する .NET Framework Data Provider が含まれています。SQL Anywhere .NET Data Provider は、.NET ネームスペースでは iAnywhere.Data.SQLAnywhere として表現されます。

Microsoft .NET Compact Framework は、Microsoft .NET 用のスマート・デバイス開発フレームワークです。SQL Anywhere .NET Compact Framework Data Provider は、Windows Mobile が稼動しているデバイスをサポートします。

System.Data.Oledb

このネームスペースは、OLE DB データ・ソースをサポートしています。このネームスペースは、Microsoft .NET Framework 固有の部分です。System.Data.Oledb を SQL Anywhere OLE DB プロバイダの SAOLEDB とともに使用して、SQL Anywhere データベースにアクセスできます。

System.Data.Odbc

このネームスペースは、ODBC データ・ソースをサポートしています。このネームスペースは、Microsoft .NET Framework 固有の部分です。System.Data.Odbc を SQL Anywhere ODBC ドライバとともに使用して、SQL Anywhere データベースにアクセスできます。

Windows Mobile では、SQL Anywhere .NET Data Provider のみサポートしています。

SQL Anywhere .NET Data Provider を使用する場合、主に以下のような利点があります。

.NET 環境では、SQL Anywhere .NET Data Provider は、SQL Anywhere データベースに対するネイティブ・アクセスを提供します。サポートされている他のプロバイダとは異なり、このデータ・プロバイダは SQL Anywhere サーバと直接通信するため、ブリッジ・テクノロジを必要としません。そのため、SQL Anywhere .NET Data Provider は、OLE DB や ODBC のデータ・プロバイダよりも処理が高速です。SQL Anywhere データベースへのアクセスには SQL Anywhere .NET Data Provider を使用することをおすすめします。

手順

  1. Visual Studio 2008を起動します。
  2. 新規プロジェクトを作成します。
    a. [ファイル]メニューから [新しいプロジェクト] を選択します。[新しいプロジェクト] ダイアログが表示されます。
    b. 左側のペインで [Visual C#] を選択します。
    c. 右側のペインで [コンソール アプリケーション] を選択します。
    d. [Name] フィールドに EmployeeDataReader と入力します。
    e. [場所] フィールドに c:\temp と入力します。
    f. [OK]をクリックして、[新しいプロジェクト] ダイアログを閉じます。
    g. しばらくすると、以下のコード・スタブを持つプロジェクトが作成されます。

    h. SQL Anywhere .NET Data Providerアセンブリに参照を追加します。i. [ソリューションエクスプローラ] ウィンドウで [参照設定] を右クリックし、ポップアップ・メニュー
    から [参照の追加] を選択します。[参照の追加] ダイアログが表示されます。
    ii. [.NET] タブで、[参照] をクリックして以下のいずれかを選択します。

    1. iAnywhere.Data.SQL Anywhere.dll (.NET 2.0 用)
    2. iAnywhere.Data.SQL Anywhere.dll (.NET 3.5 用)
    3. iAnywhere.Data.SQL Anywhere.dll (.NET 4.0 用)

    Windows Mobile プラットフォーム用に個別のバージョンのプロバイダがあります。Windows Mobile 用の SQL Anywhere .NET Data Provider の場合、[参照] タブをクリックし、Windows Mobile バージョンのプロバイダを選択してください。デフォルトの場所は install-dir\CE\Assembly\V2 です。

    i. 該当するアセンブリを選択し、[開く] をクリックします。

    j. プロジェクトの最初の部分に以下の using ディレクティブを追加します。System.Data および iAnywhere.Data.SQLAnywhere ネームスペースが設定されます。これらのネームスペースには、データベース接続に必要なすべての ADO.NET クラスが含まれています。コード・ファイルは以下のようになります。using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    Using System.Data;
    Using iAnywhere.Data.SQLAnywhere;

    namespace CustomerDataReader
    {
    class Program
    {
    static void Main(string[] args)
    {
    }
    }
    }

    k. 以下のコードを static void Main(string[] args) メソッドにコピーします。//接続を作成し、データ・ソース名をインストール済みの SQL Anywhere デモ・データベースの名前に置き換える

    SAConnection myConnection = new SAConnection(“Data
    Source=SQL Anywhere 11 Demo;UID=DBA;PWD=sql”);

    //接続を開く

    ;myConnection.Open();

    //コマンド・オブジェクトを作成する

    SACommand myCommand = myConnection.CreateCommand();

    //クエリを指定する

    myCommand.CommandText = “SELECT Surname FROM
    Employeess”;

    //コマンドの DataReader を作成する

    SADataReader myDataReader =
    myCommand.ExecuteReader();

    //結果データを表示する

    while ( myDataReader.Read())
    {
    Console.WriteLine(“{0}”,
    myDataReader[“Surname”]);
    }

    //DataReader を閉じる

    myDataReader.Close();

    //接続を閉じる

    myConnection.Close ();

    //キー入力があるまでコンソールを開いたままにする

    Console.ReadKey (true);

    l. [F5] を押してプロジェクトを実行します。以下のような名前のリストが表示されます。Whitney
    Cobb
    Chin
    Jordan

    m. 任意のキーを押してコンソール・ウィンドウを閉じます。

アプリケーションの動作の仕組み

SAConnection オブジェクトの作成

他の ADO.NET オブジェクトを使用するには、先に SAConnection オブジェクトを初期化する必要があります。このオブジェクトは、アプリケーションと SQL Anywhere .NET プロバイダ間の接続を作成します。この例では、ODBC データ・ソースを使用しますが、これはデータベースへの接続に必須のものではありません。それ以外の接続文字列を渡す必要があります。渡す文字列は、データ・ソースに含めることができます。データベース・サーバがすでに実行されている場合は、ユーザ ID とパスワードのみを渡します。接続文字列は以下のようになります。

SAConnection myConnection = new
SAConnection(@”UID=DBA;PWD=sql;ENG=MyDbEng”);

DSN を使用していないときにアプリケーションでデータベース・サーバを起動する必要がある場合は、接続文字列は以下のようになります。

SAConnection myConnection = new
SAConnection(@”UID=DBA;PWD=sql;DBF=C:\MyDB.db”);

接続文字列の前にアットマーク (@) を指定すると、ファイル名内のバックスラッシュが有効になります。指定しなかった場合、C# 文字列内のバックスラッシュをエスケープするために、バックスラッシュを二重にする必要があります。

SAConnection オブジェクトを開く

このメソッドは、.NET アプリケーションとプロバイダの間の接続を開くために必要です。このメソッドが失敗した場合、例外がスローされます。

(iAnywhere.Data.SQLAnywhere.SAException).
myConnection.Open()

クエリ文の指定

接続が開けたら、SQL 文を実行できます。データベース操作を実行するためには、まず Command オブジェクトを作成する必要があります。Command オブジェクトを作成したら、CommandText プロパティを設定します。顧客の姓と名前をフェッチしたいので、Command オブジェクトの CommandText プロパティに SQL 文を渡します。

SACommand myCommand = myConnection.CreateCommand();
myCommand.CommandText = “SELECT GivenName, Surname FROM
Customers”;

データの読み取り

この例では、DataReader オブジェクトを使用して、クエリの結果を短時間で取得します。DataReader は、読み取り専用オブジェクトです。データを更新することはできません。DataReader の read メソッドは、一度に 1 つのローを読み取ります。このメソッドは、読み取るデータがあるかぎり true を返します。読み取るデータがなくなると、false を返します。

while ( myDataReader.Read())
{
     Console.WriteLine(“{0}”, myDataReader[“SurName”]);
}

クリーンアップ

最後に、DataReader および Connection オブジェクトを閉じます。

myDataReader.Close();
myConnection.Close();