SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

MonoでDBMS用データプロバイダを使う

Monoで他のDBも使ってみたよ!(Firebird、DB2編)

MonoでFirebird、DB2を使う

  • X ポスト
  • このエントリーをはてなブックマークに追加

Firebird DBの準備

 ゲストOS側で動作確認用DB(TestData)を作成します。「gsec」、「isql-fb」コマンドを使用したDB操作を行います。

 任意のユーザー(sta)でホストおよびゲストOSにログインして作業を行うものとして解説を行います。

DBおよびテーブル作成用SQLファイルの準備

 「~/src/sql/firebird」に以下のDBおよびテーブル作成用SQLファイルを用意します。

TestData.sql
-- isql-fb -i ~/src/sql/firebird/TestData.sql
--
-- データベース削除
-- connect '/home/sta/data/firebird/TestData.fdb'
--     user 'sta'
--     password 'password';
-- drop database;

-- データベース作成
create database '/home/sta/data/firebird/TestData.fdb'
    user 'sta'
    password 'password'
    default character set UTF8;
Products.sql
-- isql-fb -i ~/src/sql/firebird/Products.sql
--
-- データベース接続
connect '/home/sta/data/firebird/TestData.fdb'
    user 'sta'
    password 'password';

-- Products テーブル削除
-- drop table Products;

-- Products テーブル作成
create table Products(
    ProductID integer not null primary key,
    ProductName varchar(25) not null,
    Price double precision,
    ProductDescription varchar(128));

-- INSERT 実行
insert into Products (ProductID, ProductName, Price, ProductDescription)
    values (0, 'Firebird', null, 'Firebird 2.1.1');

-- INSERT 実行
insert into Products (ProductID, ProductName, Price, ProductDescription)
    values (1, 'Clamp', 12.48, 'Workbench clamp');

-- INSERT 実行 カラムの順番を変えたパターン
insert into Products (ProductName, ProductID, Price, ProductDescription)
    values ('Screwdriver', 50, 3.17, 'Flat head');

-- INSERT 実行 カラムリスト指定なし、入力値リストはカラム順パターン
insert into Products
    values (75, 'Tire Bar', null, 'Tool for changing tires.');

-- INSERT 実行 ProductDescription カラムの指定なしパターン
insert into Products (ProductID, ProductName, Price)
    values (3000, '3mm Bracket', .52);

-- UPDATE 実行
update Products
    set ProductName = 'Flat Head Screwdriver'
    where ProductID = 50;

-- SELECT 実行 確認用
select * from Products;

ユーザーの追加

 ユーザー(sta)を追加します。

$ gsec -user sysdba -pa password 
GSEC> add sta -pw password
GSEC> quit

データベース作成

$ mkdir -p ~/data/firebird
$ chmod a+w ~/data/firebird
$ isql-fb -i ~/src/sql/firebird/TestData.sql

テーブル作成

$ isql-fb -i ~/src/sql/firebird/Products.sql

データプロバイダの準備

 ホストOS側でMonoDevelopを使用して「FirebirdSql.Data.FirebirdClient」のソースからビルドを行い、GACへ登録します。

ビルド

 「FirebirdClient-2.1.0-Src.zip」を任意の場所(~/tmp/Firebird/FirebirdClient-2.1.0-Src)に展開し、MonoDevelopからプロジェクトファイル「~/tmp/Firebird/FirebirdClient-2.1.0-Src/NETProvider/source/FirebirdSql/FirebirdSql.Data.FirebirdClient.csproj」を開きます。

 メニュー[プロジェクト]−[オプション]から以下の変更を行います。

[ビルド]-[コンパイラ]-[シンボルを定義]の変更(例:Debug コンフィグレーション)
TRACE;DEBUG;MONO;LINUX;NET_20;EXTERNAL_ENGINE
[ビルド]-[アセンブリ署名]-[厳密名のファイル]を設定(例:Debug コンフィグレーション)
/home/sta/tmp/Firebird/FirebirdClient-2.1.0-Src/NETProvider/source/FirebirdSql/FirebirdSql.Data.FirebirdClient.snk

変更後、ビルドを実行します。いくつか警告が表示されますが問題はないようです。

GACへ登録

 gacutilコマンドを使用してGACへ登録します。

gacutil コマンド実行例
$ cd ~/tmp/Firebird/FirebirdClient-2.1.0-Src/NETProvider/source/FirebirdSql/bin/Debug
$ sudo /opt/mono/2.4/bin/gacutil -i FirebirdSql.Data.FirebirdClient.dll -package 2.0
Package exported to: /opt/mono/2.4/lib/mono/2.0/FirebirdSql.Data.FirebirdClient.dll -> ../gac/FirebirdSql.Data.FirebirdClient/2.1.0.0__3750abcc3150b00c/FirebirdSql.Data.FirebirdClient.dll
Installed FirebirdSql.Data.FirebirdClient.dll into the gac (/opt/mono/2.4/lib/mono/gac)
make

 「FirebirdClient-2.1.0-Src.zip」にはビルド用のmakefileが含まれているので、それを使用したビルドも可能なはずですが、何故かそのままでは使用できないので、修正したmakefileを本稿に添付しました(FirebirdClientディレクトリ)。

make 実行例
$ cd ~/tmp/Firebird/FirebirdClient-2.1.0-Src/NETProvider/build/linux
$ make
$ cd mono/linux
$ sudo /opt/mono/2.4/bin/gacutil -i FirebirdSql.Data.FirebirdClient.dll -package 2.0

次のページ
DBアクセス

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
MonoでDBMS用データプロバイダを使う連載記事一覧

もっと読む

この記事の著者

sta(エステーエー)

風来坊blog:sta.blockhead

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3975 2009/08/28 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング