SHOEISHA iD

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

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

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

MonoでSQLiteを使ってみたよ!(DBアクセス-データアダプタ編)

MonoでSQLiteを使う(後篇)

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

Monoに注目していくつか動作確認を行いました。今記事ではMonoとSQLiteを使用し、データアダプタによる基本的なDBアクセスについて解説を行います。

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

はじめに

 前回に引き続き、MonoでSQLiteを使ったデータベース(以下DB)アクセスについて解説します。基本設定等については前回の記事を参照してください。

6.DBアクセスーデータアダプタ編

 データアダプタを使用した、DBに対して間接的なデータ操作を行うサンプルコード(C#)について解説します。

 間接的たる所以は、

  1. データアダプタのFillメソッドによるDBからデータセットへのデータ格納
  2. データセットへのデータ操作(行挿入、データの更新、行削除)
  3. データアダプタのUpdateメソッドによるデータセットからDBへのデータ反映

 という処理の流れを組むためです。

 サンプルコードの簡単な処理の流れとしては以下になります。

  1. DBコネクションオブジェクト作成
  2. データアダプタオブジェクト作成
  3. データセットオブジェクト作成
  4. データセットへのデータ格納
  5. データセットへのデータ操作
  6. データセットからDBへのデータ反映

データアダプタ編基本

 データセットへのデータ格納(データアダプタのFillメソッドによるSELECT文の実行)を行うサンプルコードについて解説します。

プロバイダファクトリ未使用

anew.cs
using System;
using System.Data;
using Mono.Data.Sqlite;

namespace SqliteExample
{
  public class ArtificialNewType
  {
    public static void Main(string[] args)
    {
      string constr = "Data Source=/home/sta/data/TestData.db";
      string sstr   = "SELECT ProductID, ProductName, " +
                        "Price, ProductDescription " +
                      "FROM Products";

      // 1.DBコネクションオブジェクト作成
      using (SqliteConnection dbcon 
        = new SqliteConnection(constr))
      {
        // 2.データアダプタオブジェクト作成
        using (SqliteDataAdapter da 
          = new SqliteDataAdapter(sstr, dbcon))
        // 3.データセットオブジェクト作成
        using (DataSet ds = new DataSet())
        {
          // 4.データセットへのデータ格納
          da.Fill(ds, "Products");

          DataTable dt = ds.Tables["Products"];
          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 anew.cs -r:System.Data.dll -r:Mono.Data.Sqlite.dll
 *
 * 実行:
 *
 *   mono anew.exe
 *
 */

プロバイダファクトリ使用

anew2.cs
using System;
using System.Data;
using System.Data.Common;

namespace SqliteExample
{
  public class ArtificialNewType2
  {
    public static void Main(string[] args)
    {
      string dpstr  = "Mono.Data.Sqlite";
      string constr = "Data Source=/home/sta/data/TestData.db";
      string sstr   = "SELECT ProductID, ProductName, " +
                        "Price, ProductDescription " +
                      "FROM Products";

      // DBプロバイダファクトリ作成
      DbProviderFactory dpf 
        = DbProviderFactories.GetFactory(dpstr);
      // 1.DBコネクションオブジェクト作成
      using (DbConnection dbcon = dpf.CreateConnection())
      {
        dbcon.ConnectionString = constr;

        // 2.データアダプタオブジェクト作成
        using (DbDataAdapter da = dpf.CreateDataAdapter())
        // SELECT用コマンドオブジェクト作成
        using (DbCommand scmd = dbcon.CreateCommand())
        // 3.データセットオブジェクト作成
        using (DataSet ds = new DataSet())
        {
          // SELECT用コマンドオブジェクト設定
          scmd.CommandText = sstr;
          da.SelectCommand = scmd;

          // 4.データセットへのデータ格納
          da.Fill(ds, "Products");

          DataTable dt = ds.Tables["Products"];
          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 anew2.cs -r:System.Data.dll
 *
 * 実行:
 *
 *   mono anew2.exe
 *
 */

 プロバイダファクトリを使用しないanew.csの方がよりシンプルな記述が可能ですが、今記事ではより汎用的ということでanew2.csを基にしたサンプルコードについて解説します。

 anew2.csでは明示的にデータアダプタのSelectCommandプロパティにコマンドオブジェクトを設定しています(anew.csではデータアダプタオブジェクト作成時にコンストラクタの引数としてSELECT文、コネクションオブジェクトを渡すことで、明示的な設定は必要なし)。

会員登録無料すると、続きをお読みいただけます

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

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

メールバックナンバー

次のページ
INSERT

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

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

もっと読む

この記事の著者

sta(エステーエー)

風来坊blog:sta.blockhead

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

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

この記事をシェア

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

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング