SHOEISHA iD

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

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

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

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

MonoでFirebird、DB2を使う

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

DBアクセス

 データアダプタを使用したDBアクセスについての解説です。

接続確認

 接続確認用として、SELECT文を実行する以下のコード(C#)を使用します。

select1.cs
using System;
using System.Data;
using FirebirdSql.Data.FirebirdClient;

namespace FirebirdExample
{
  public class Select1
  {
    public static void Main(string[] args)
    {
      // 接続文字列
      string constr = "Server=192.168.1.5;" +
"Database=/home/sta/data/firebird/TestData.fdb;" +
"User=sta;" +
"Password=password;" +
"Dialect=3;";
// SQL文字列 string sstr = "SELECT ProductID, ProductName, Price, ProductDescription " + "FROM Products"; using (FbConnection dbcon = new FbConnection(constr)) { using (FbDataAdapter da = new FbDataAdapter(sstr, dbcon)) using (DataTable dt = new DataTable()) { // SELECT実行 da.Fill(dt); foreach (DataRow dr in dt.Rows) { Console.WriteLine("ID:{0} NAME:{1} PRICE:{2} DESCRIPTION:{3}", dr[0], dr[1], dr[2], dr[3]); } } } } } } /* * ビルド: * * gmcs select1.cs -r:System.Data.dll -r:FirebirdSql.Data.FirebirdClient.dll * * 実行: * * mono select1.exe * */
実行結果
$ mono select1.exe
ID:0 NAME:Firebird PRICE: DESCRIPTION:Firebird 2.1.1
ID:1 NAME:Clamp PRICE:12.48 DESCRIPTION:Workbench clamp
ID:50 NAME:Flat Head Screwdriver PRICE:3.17 DESCRIPTION:Flat head
ID:75 NAME:Tire Bar PRICE: DESCRIPTION:Tool for changing tires.
ID:3000 NAME:3mm Bracket PRICE:0.52 DESCRIPTION:

動作確認

 前回と同様の各DBMS共通の動作確認用コード(C#)を使用します。動作確認用DBへのデータの登録、更新、削除を行う単純なコンソールプログラムですが、Firebird用に以下の追加修正を行います(動作確認で使用したプログラムコード、構成情報ファイルを本稿に添付しました)。

プログラムコード
client1.cs から抜粋
...
    public static void Main(string[] args)
    {
      int rc;

      string s;
      string cs;
      string ph = "@"; // パラメータ識別子
      string dpstr;    // プロバイダ識別名
      string constr;   // 接続文字列

      // 接続先DBの選択
      START:
      Console.Write("Connect to\n1:SQLite\n2:PostgreSQL\n3:MySQL\n4:SqlServer\n5:Oracle\n6:Firebird\n?> ");
      s = Console.ReadLine();
      switch(s)
      {
        // SQLite
        case "1":
          cs = "Sqlite";
          break;
        // PostgreSQL
        case "2":
          cs = "Postgresql";
          ph = ":";
          break;
        // MySQL
        case "3":
          cs = "MySql";
          ph = "?";
          break;
        // SQL Server
        case "4":
          cs = "SqlServer";
          break;
        // Oracle
        case "5":
          cs = "Oracle";
          ph = ":";
          break;
        // Firebird
        case "6":
cs = "Firebird";
break;
default: goto START; } ...
構成情報ファイル
client1.exe.config
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
  <system.data>
    <DbProviderFactories>
      <add name="Npgsql Data Provider" invariant="Npgsql" support="FF"
        description=".Net Framework Data Provider for PostgreSQL"
        type="Npgsql.NpgsqlFactory, Npgsql, Version=2.0.5.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7" />
      <add name="MySQL ConnectorNet" invariant="MySql.Data" support="FF"
        description="ADO.Net driver for MySQL"
        type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.0.3.0, Culture=neutral, PublicKeyToken=afb1e9499f4f0f5a" />
      <add name="Firebird .NET Data Provider" invariant="FirebirdSql.Data.FirebirdClient" support="FF"
description=".Net Framework Data Provider for Firebird"
type="FirebirdSql.Data.FirebirdClient.FirebirdClientFactory, FirebirdSql.Data.FirebirdClient, Version=2.1.0.0, Culture=neutral, PublicKeyToken=3750abcc3150b00c" />
</DbProviderFactories> </system.data> <connectionStrings configSource="cs.config" /> </configuration>
cs.config
<connectionStrings>
  <add name="Sqlite" providerName="Mono.Data.Sqlite"
    connectionString="Data Source=/home/sta/data/sqlite/TestData.db" />
  <add name="Postgresql" providerName="Npgsql"
    connectionString="Server=192.168.1.5;Port=5432;User Id=sta;Password=password;Database=TestData;" />
  <add name="MySql" providerName="MySql.Data"
    connectionString="Server=192.168.1.5;Database=TestData;Uid=sta;Pwd=password;CharSet=utf8" />
  <add name="SqlServer" providerName="System.Data.SqlClient"
    connectionString="Data Source=192.168.1.6,49174;Initial Catalog=TestData;User ID=sta;Password=passw0rd;Trusted_Connection=False" />
  <add name="Oracle" providerName="System.Data.OracleClient"
    connectionString="Server=192.168.1.5;User ID=testdata;Password=password;" />
  <add name="Firebird" providerName="FirebirdSql.Data.FirebirdClient"
connectionString="Server=192.168.1.5;Database=/home/sta/data/firebird/TestData.fdb;User=sta;Password=password;Dialect=3;" />
</connectionStrings>
実行例
実行例(データの登録)
$ mono client1.exe
Connect to
1:SQLite
2:PostgreSQL
3:MySQL
4:SqlServer
5:Oracle
6:Firebird
?> 6
状態:Unchanged ID:0 NAME:Firebird PRICE: DESCRIPTION:Firebird 2.1.1
状態:Unchanged ID:1 NAME:Clamp PRICE:12.48 DESCRIPTION:Workbench clamp
状態:Unchanged ID:50 NAME:Flat Head Screwdriver PRICE:3.17 DESCRIPTION:Flat head
状態:Unchanged ID:75 NAME:Tire Bar PRICE: DESCRIPTION:Tool for changing tires.
状態:Unchanged ID:3000 NAME:3mm Bracket PRICE:0.52 DESCRIPTION:

1:INSERT
2:UPDATE
3:DELETE
4:SUBMIT
5:RELOAD
6:EXIT
?> 1
ID(int)?> 2
NAME(string)?> test
PRICE(num)?> 2.2
DESCRIPTION(string)?> テスト用
状態:Unchanged ID:0 NAME:Firebird PRICE: DESCRIPTION:Firebird 2.1.1
状態:Unchanged ID:1 NAME:Clamp PRICE:12.48 DESCRIPTION:Workbench clamp
状態:Unchanged ID:50 NAME:Flat Head Screwdriver PRICE:3.17 DESCRIPTION:Flat head
状態:Unchanged ID:75 NAME:Tire Bar PRICE: DESCRIPTION:Tool for changing tires.
状態:Unchanged ID:3000 NAME:3mm Bracket PRICE:0.52 DESCRIPTION:
状態:Added ID:2 NAME:test PRICE:2.2 DESCRIPTION:テスト用

1:INSERT
2:UPDATE
3:DELETE
4:SUBMIT
5:RELOAD
6:EXIT
?> 4
状態:Unchanged ID:0 NAME:Firebird PRICE: DESCRIPTION:Firebird 2.1.1
状態:Unchanged ID:1 NAME:Clamp PRICE:12.48 DESCRIPTION:Workbench clamp
状態:Unchanged ID:2 NAME:test PRICE:2.2 DESCRIPTION:テスト用
状態:Unchanged ID:50 NAME:Flat Head Screwdriver PRICE:3.17 DESCRIPTION:Flat head
状態:Unchanged ID:75 NAME:Tire Bar PRICE: DESCRIPTION:Tool for changing tires.
状態:Unchanged ID:3000 NAME:3mm Bracket PRICE:0.52 DESCRIPTION:

1:INSERT
2:UPDATE
3:DELETE
4:SUBMIT
5:RELOAD
6:EXIT
?> 6

注意事項

パラメータ識別子

 SQL文内で使用するパラメータの識別子として、「@」が使用できます。

DbProviderFactories

 Mono 2.4の「machine.config(2.0 profile)」には「FirebirdSql.Data.FirebirdClient」用のデータプロバイダファクトリ情報は登録されていないので、「machine.config」に追加する等の対応が必要になります。今回は動作確認用プログラムの構成情報ファイル内に記述することで対応しています。

MonoDevelopは未対応

 残念ながら、Firebird用のアドインが存在しないので、MonoDevelopからFirebird DBへの操作(クエリの実行)はできませんでした。

次のページ
5.DB2編

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

  • 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」など、さまざまなカンファレンスを企画・運営しています。

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

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

メールバックナンバー

アクセスランキング

アクセスランキング