このチュートリアルでは、Adaptive Server Anywhere .NET データ・プロバイダを使用してC#
プロジェクトでAdaptive Server Anywhere (SQL Anywhere) データベースへの接続を動的に作成する方法について説明します。
必要なソフトウェア
・SQL Anywhere Studio 8.0.2 EBF 以上
・asademo.db ファイル (Adaptive Server Anywhere (SQL Anywhere) に付属)
・ASA 8.0 Sample データ・ソース (Adaptive Server Anywhere (SQL Anywhere) のインストール時にデフォルトで作成される)
・Microsoft Visual Studio .NET バージョン 7.0
・Microsoft ADO.NET
・Windows 98、Me、NT、2000、XP
手順
1. Visual Studio .NET を起動します。
2. [新しいプロジェクト] ダイアログで、次の操作を行います。
・左側で [Visual C# プロジェクト] を選択します。
・右側で [コンソール アプリケーション] を選択します。
・プロジェクト名として CustomerDataReader と入力します。
・プロジェクトの場所として c:\temp と入力します。
・[OK] をクリックします。
3. 次のようにして、Adaptive Server Anywhere .NET データ・プロバイダへの参照を追加します。
・[プロジェクト] メニューから [参照の追加] を選択します。
・[参照] をクリックします。
・ディレクトリ C:\Program Files\Sybase\SQL Anywhere 8\win32 に移動します。
・iAnywhere.Data.AsaClient.dll を選択します。
・[開く] をクリックします。
4. System.Data 名前空間を設定します。これは、ADO.NET クラスが配置される場所です。プロジェクトの先頭部分に次の using ディレクティブを追加します。
using System.Data;
5. プロジェクトの先頭にある using ディレクティブのリストに次の行を追加します。
using iAnywhere.Data.AsaClient;
この行は、データ・プロバイダ ・クラスを参照します。この時点でプロジェクトは次のようになります。
using System;
using System.Data;
using iAnywere.Data.AsaClient;
namespace CustomerDataReader
{
/// <summary>
/// Class1 の概要の説明です。
/// </summary>
class Class1
{
/// <summary>
/// アプリケーションのメイン エントリ ポイントです。
/// </summary>
[STAThread]
static void Main(string[] args)
{
//
// TODO:アプリケーションを開始するコードをここに追加してください。
//
}
}
}
これで、Adaptive Server Anywhere (SQL Anywhere) と C# アプリケーションの間の通信を確立するために必要なコードを追加できるようになります。
6. 「//TODO:アプリケーションを開始するコードをここに追加してください。」というコメントの後ろに、public
static void Main() 関数のコードを次のように追加します。
//接続文字列を設定する
AsaConnection myConnection = new AsaConnection(
@"Data Source=ASA 8.0 Sample;");
//接続を開く
try{
myConnection.Open();
//Command オブジェクトを作成する
AsaCommand myCommand = myConnection.CreateCommand();
//Command オブジェクトに対するクエリを指定する
myCommand.CommandText = "SELECT fname, lname FROM customer";
//コマンドに対する DataReader を作成する
AsaDataReader myDataReader = myCommand.ExecuteReader();
//データを表示する
while ( myDataReader.Read())
{
Console.WriteLine("\t{0}\t{1}",
myDataReader["fname"],myDataReader["lname"]);
}
myDataReader.Close();
myConnection.Close();
} catch (AsaException ex) {
string err;
err = "Description: " + ex.Message + " SQL Code:
" +
ex.Error;
Console.WriteLine(err);
}
7. Ctrl と F5 キーを押してプロジェクトを実行します。
次のように表示されます。
:
:
:Dominic Johansen
Stanley Jue
Harry Jones
Marie Curie
Elizabeth Bordon
Len Manager
Tony Antolini
Tom Cruz
Janice O'Toole
Stevie Nickolas
Philipe Fernandez
Jennifer Stutzman
William Thompson
Press any key to continue
アプリケーションの仕組み
AsaConnection オブジェクト
AsaConnection myConnection = new AsaConnection(
@"Data Source=ASA 8.0 Sample;");
AsaConnection オブジェクトは、アプリケーションとAdaptive Server Anywhere
.NET データ・プロバイダの間の接続を作成します。接続が確立されたら、残りの接続文字列を渡すことができます。上記のコードでは、ODBC
データ・ソースを使用して接続しています。接続文字列を使用して接続することも可能です。その例を次に示します。
AsaConnection myConnection = new AsaConnection(
@"UID=dba;PWD=sql;DBF=c:\Program Files\Sybase\SQL
Anywhere 8\asademo.db");
アットマーク (@) を指定すると、接続文字列内のバックスラッシュ (\) が有効になります。アットマークを指定しなかった場合は、C#
文字列内のバックスラッシュをエスケープするために、それらのバックスラッシュを二重にする必要があります。
Open メソッド
myConnection.Open()
このメソッドは、.NET アプリケーションとAdaptive Server Anywhere .NET データ・プロバイダの間の接続を開く場合に必要です。このメソッドが失敗した場合は、次のような例外がスローされます。
'iAnywhere.Data.AsaClient.AsaException' occurred in system.data.dll
接続に失敗した場合は、次のコードを使用して Adaptive Server Anywhere (SQL Anywhere) エラー・メッセージと Error コードが取得されます。
try {
myConnection.Open()
} catch (AsaException ex) {
string err;
err = "Description: " + ex.Message + " SQL Code: "
+
ex.Error;
SQL コマンド
AsaCommand myCommand = myConnection.CreateCommand();
//クエリを指定する
myCommand.CommandText = "Select fname, lname from Customer";
接続が正常に開いたら、SQL コマンドを発行できます。データベース操作を実行するためには、まず
Command オブジェクトを作成します。Command オブジェクトを作成したら、Command
オブジェクトの CommandText プロパティを設定します。顧客の姓と名前をフェッチしたいので、Command
オブジェクトの CommandText プロパティに SQL 文を渡します。
DataReader オブジェクト
AsaDataReader myDataReader = myCommand.ExecuteReader();
この例では、DataReader オブジェクトを使用してクエリの結果をすぐに取得しています。これは読み取り専用のオブジェクトであり、ユーザはそのデータを更新できません。
次のコードによってデータが表示されます。
while ( myDataReader.Read())
{
Console.WriteLine("\t{0}\t{1}",
myDataReader["fname"],myDataReader["lname"]);
}
DataReader の read() メソッドを使用すると、ローを 1 つずつ読み取ることができます。読み取るデータが存在する限り、このメソッドは
true を返します。それ以外の場合は、false を返します。
最後に DataReader および Connection オブジェクトが閉じられます。
myDataReader.Close();
myConnection.Close();
|