いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

Firebirdへの接続サンプル(IDbConnection系)

とりあえず、一番低レベルなやつのサンプルです。
ConnectionからSQL発行してます。
実行するには、Firebird用の.Net Data Providerをインストールする
必要があります。

// vim:set ts=4 sw=4 et ws is nowrap ft=cs:
using System;
using System.Data;
using FirebirdSql.Data.FirebirdClient;

namespace Gsf.Samples.CSharp{

    ///<summary>
    /// Firebirdデータベースへの接続・データ取得・追加・変更・削除
    /// のサンプルです。実行する際はFirebirdClientのdll(FirebirdSql.Data.Firebird.dll)
    /// が必要になります。
    ///</summary>
    class FirebirdConnectSample{

        const string _connectionString 
                        = "DataSource=localhost;Database=test_db;User=test;Password=xxxx;Dialect=3;Character Set=SJIS_0208";

        static void Main(){
            //
            // 接続.
            //
            IDbConnection conn = null;
            try{
                Console.Write("接続開始..............");

                conn = new FbConnection();
                conn.ConnectionString = _connectionString;
                conn.Open();

                Console.WriteLine("接続完了!!!");

                //
                // Select.
                //
                IDbCommand select = conn.CreateCommand();
                select.CommandText = "select id, name from category";
                //
                // DataReaderは、関連するコネクションを排他ロックするので
                // 一つのDataReaderがオープンしている間は他のDataReaderを
                // そのコネクションで処理することができない。
                //
                PrintCategories(select);

                //
                // 以下のように、該当テーブルのスキーマ情報を
                // 取得することも可能。
                //
                using(IDataReader reader = select.ExecuteReader()){
                    if(((FbDataReader) reader).HasRows){
                        DataTable table = reader.GetSchemaTable();

                        foreach(DataRow row in table.Rows){
                            foreach(DataColumn column in table.Columns){
                                Console.WriteLine("{0} : {1}", column.ColumnName, row[column]);
                            }
                        }
                    }
                }

                //
                // Insert.
                //
                IDbCommand insert = conn.CreateCommand();
                insert.CommandText = "insert into category (id, name) values (@Id, @Name)";
                insert.Parameters.Add(new FbParameter("@Id",   100));
                insert.Parameters.Add(new FbParameter("@Name", "FirebirdConnectSample"));

                int count = insert.ExecuteNonQuery();
                Console.WriteLine("inserted : {0}", count);
                PrintCategories(select);

                //
                // Update.
                //
                IDbCommand update = conn.CreateCommand();
                update.CommandText = "update category set name = @Name where id = @Id";
                update.Parameters.Add(new FbParameter("@Id",   100));
                update.Parameters.Add(new FbParameter("@Name", "updated name."));

                count = update.ExecuteNonQuery();
                Console.WriteLine("updated : {0}", count);
                PrintCategories(select);

                //
                // Delete.
                //
                IDbCommand delete = conn.CreateCommand();
                delete.CommandText = "delete from category where id = @Id";
                delete.Parameters.Add(new FbParameter("@Id", 100));

                count = delete.ExecuteNonQuery();
                Console.WriteLine("deleted : {0}", count);
                PrintCategories(select);

            }finally{
                if(conn != null){
                    conn.Close();
                    Console.WriteLine("コネクションを解放。");
                }
            }
        }

        private static void PrintCategories(IDbCommand select){
            using(IDataReader reader = select.ExecuteReader()){
                if(((FbDataReader) reader).HasRows){
                    for(; reader.Read();){
                        Console.WriteLine("{0}: {1}", reader["id"], reader["name"]);
                    }
                }
            }
        }
    }
}


================================
過去の記事については、以下のページからご参照下さい。