Shoeisha Technology Media

CodeZine(コードジン)

記事種別から探す

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

MonoでSQLiteを使う(後篇)

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2008/08/27 14:00

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文、コネクションオブジェクトを渡すことで、明示的な設定は必要なし)。


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

著者プロフィール

バックナンバー

連載:MonoでDBMS用データプロバイダを使う
All contents copyright © 2005-2017 Shoeisha Co., Ltd. All rights reserved. ver.1.5