トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

C#/PostgreSQL

一部の情報は非常に古いもの(20年以上前〜)ですので、利用する際はご注意ください(Java 1.4 とか .NET 1.0 とか、Windows 2000 とか)
お問い合せは wiki@shise.net まで。Gmail に転送されるので、スパムは全部カットされます。


 

前提

PostgreSQL 本体がインストールされると、一緒に ODBC ドライバとか、OLE DB ドライバなんかもインストールされるっぽい。
もし PostgreSQL 本体が入って無くても、PostgreSQL OLE DB などのドライバを別途インストールすれば、PostgreSQL が動いているマシンに接続しにいけるはず。

とりあえず ODBC が一通り動いたのでメモメモ。
OleDb はうまく動かなかった。

ODBCドライバ

PostgreSQL 本体がインストールされていないマシンから、別なマシンの PostgreSQL に接続しにいく場合は、別途ドライバを入れる必要がある。
ドライバの入れ方は2種類。
自力でファイルをコピーする方法と、MSI パッケージを使って入れる方法。

 自力インストール

http://www.postgresql.org/ftp/odbc/versions/dll/
このへんのリンクから取りにいける。ファイルのバージョンに注意。

バージョンを選択した後ダウンロードサイトを選択。するとダウンロードが開始される。
ダウンロードしたファイルを解凍し、DLLを Windows の System32 フォルダなどにコピる。
そのあと付属のレジストリファイルを実行すればドライバのインストール完了。
再起動しなくても使える。

 MSIでインストール

http://www.postgresql.org/ftp/odbc/versions/msi/

バージョンを選択した後ダウンロードサイトを選択。するとダウンロードが開始される。
ダウンロードした後、ファイルを解凍して出てきた psqlodbc.msi を実行して、次へ次へとボタンをおしてればインストールが終わる。

ODBC を使ったサンプル

ほとんどMicrosoftのまんまだけど、
http://msdn.microsoft.com/library/ja/cpref/html/frlrfSystemDataOdbcOdbcConnectionClassTopic.asp

OdbcCommand を使いまわしてるけど、それが正しいのかどうかは知らない。

 こういうテーブルがあったとして


create table test(
    id serial primary key,
    name text
);

 接続

string myConnection = string.Empty;
myConnection += "DRIVER=PostgreSQL;";	// PostgreSQL を指定
myConnection += "SERVER=localhost;";		// 接続先?
myConnection += "DATABASE=testdb;";		// データベース名
myConnection += "USERNAME=postgres;";	// 接続ユーザ名
myConnection += "PASSWORD=password;";	// パスワード

// 接続を開く
OdbcConnection myConn = new OdbcConnection(myConnection);
myConn.Open();

// コマンドの作成
OdbcCommand myOdbcCommand = new OdbcCommand();
myOdbcCommand.Connection = myConn;

 「hoge」というデータを追加したいとき。

myOdbcCommand.CommandText = "insert into test(name) values('hoge')";
myOdbcCommand.ExecuteNonQuery();

 全部画面に出す

myOdbcCommand.CommandText = "select * from test";
OdbcDataReader reader = myOdbcCommand.ExecuteReader();
// 行が続く限り取り出し
while(reader.Read())
{
    Console.WriteLine(reader.GetInt32(0) + " " + reader.GetString(1));
}
reader.Close();

 データ件数カウント

myOdbcCommand.CommandText = "select count(*) from test";

// 一番左上のモノを取得
long count = (long)c.ExecuteScalar();

Console.WriteLine(count+" 件のデータ");

その他

コネクションプールみたいなのは、あるかもしれないけど見つけられなかった。
自分の場合は、面白そうだから自力で作ってみたが。