[ C# Npgsql ] SQL を発行してデータベースのレコードを取得 ( NpgsqlDataReader )

Pocket

ここでは、Npgsql で select 文を発行して結果を取得するサンプルコードを掲載しています。結果を取得しない delete 文などのサンプルは 「 トランザクションの管理 ( コミットとロールバック ) 」 を参照ください。

スポンサーリンク

SELECT 文の発行と結果の読み込み

Npgsql で select 文を発行して、その結果を取得するサンプルコードになります。詳細はサンプル内のコメントも参照ください。

C#

//using Npgsql;
//using System.Data;

// データベース接続文字列
string conStr = @"Server=localhost;Port=5432;User Id=postgres;Password=password;Database=dbname";

// データベースに接続
NpgsqlConnection conn = new NpgsqlConnection(conStr);            
conn.Open();

// 発行するselect文
string sql = @"select col1, col2, col3 from table1 order by col1";

NpgsqlCommand cmd = new NpgsqlCommand(sql, conn);

// クエリ実行
using (NpgsqlDataReader dr = cmd.ExecuteReader())
{
    // レコードなし
    if (dr.HasRows == false)
    {
         // この処理はなくてもOK
    }

    while (dr.Read())
    {
        // NULL の場合は、初期値を設定するようにする
        // データベースの型に合わせて格納する変数の型も変更する
        string col1   = (dr["col1"] == DBNull.Value) ? String.Empty : (string)dr["col1"];
        DateTime col2 = (dr["col2"] == DBNull.Value) ? DateTime.MinValue : (DateTime)dr["col2"];
        int col3      = (dr["col3"] == DBNull.Value) ? 0 : (int)dr["col3"];

        // 取得したデータを云々・・の処理など
    }

    /*
     * ポイント
     *-----------------------------------------------------------------------
     * using などで、ちゃんと DataReader をクローズしておかないと不具合の原因になる
     * 手動でクローズする場合は、dr.Close();
     */
}

// データベースから切断
conn.Close();
    
スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *