Database Support Blog

  • EDB
2016.03.08

EDB Postgresに.NET Framework から接続してみよう(EDBDataProviderの使い方)

EDB PostgresはPostgreSQLを元に様々な拡張やOracle Databaseとの互換性をもたせた製品です。
EDB Postgresは様々なプログラミング言語から接続することができます。今回は、Microsoft社が提供する.NET Framework上で動作するVB.NETからEDB Postgresを利用する方法をご紹介します。

環境

本手順は以下環境で実施しています。

実行環境

## Database
* OS: OracleLinux 6.4 64bit
* DB: EPAS 9.6.2 (64bit)
## Client
* Windows 7 64bit
* EDB Connectors 9.6.2
* .NET Framework 4.5
* VisualStudio 2017 Community Editon

EDB Connectors

概要

EDB Postgresでは、クライアントから接続するためのモジュールだけをまとめた、EDB Connectorsを提供しています。EDB Connectorsには以下のモジュールが含まれています。

* C言語用のライブラリ(EDB-OCI)
* JDBCドライバ
* ODBCドライバ
* .NET Framework Family(EDBDataProvider, EnterpriseDB.Client)

今回は.NET Frameworkで動作するVB.NETを使いますのでEDBDataProviderを使用します。なおEDBDataProviderは、9.6からEnterpriseDB.Clientという名前に変更されておりますが、9.5までを利用されている方も想定し以降はEDBDataProviderと表記します。

インストール

クライアントOS側にEDB Connectorsをインストールします。すでにEDBPostgresを導入している環境であれば、インストールの一貫でEDB Connectorsが導入されています。インストールしていない場合は、以下サイトの最下部よりWindows用のEDB Postgresのインストーラを入手してください。
EnterpriseDB Software Downloads
ダウンロードできるものは、DBサーバ自体を含んだインストーラですがConnectorsだけをインストールすることが可能です。以下のキャプチャに従ってインストールしていきます。

これでEDB Connectorsのインストールが完了しました。

EDBDataProviderの使い方

プロジェクトの作成

それでは実際にEDBDataProviderを使っていきます。まずはVisual Studioでプロジェクトを作成します。今回は試しやすい様にコンソールアプリケーションにします。なお、EDB Postgresとのやり取りに関わる部分はフォームアプリケーションでも特にかわりません。

これでViualStudioのプロジェクトが作成できました。

参照の追加

プロジェクトが作成できましたので、EDBDataProviderが使えるようにまずは参照の追加を行います。

なお、使用する.NET Frameworkにあわせて追加するDLLを選んでください。
* .NET Framework 4.0
- dotNet/4.0/EDBDataProvider2.0.2.dll
* .NET Framework 4.5-
- dotNet/4.5/EnterpriseDB.Client.dll
いずれも名前空間は"EnterpriseDB.EDBClient"になります。

接続

それでは、実際にコードを作成していきます。まずは、必要なImportsセクションを用意します。

Imports EnterpriseDB.EDBClient

EDBConnectionオブジェクトを作成します。SQLの発行等、殆どの操作はこのEDBConnectionオブジェクト経由で実行します。EDBConnectionオブジェクトの初期化時は文字列で必要な接続に関する情報を渡します。

Dim conn As EDBConnection
conn = New EDBConnection(
    "Server=DBServerHost;" +
    "Port=5444;" +
    "User ID=enterprisedb;" +
    "Password=enterprisedb;" +
    "Database=edb"
)

最低限指定するのは以下の項目です。
* Server: DBサーバアドレス
* Port: DBサーバポート
* User ID: DBユーザ名
* Password: DBユーザパスワード
* Database: 接続先DB名
その他にもコネクションプールに関する設定等もありますので、詳細は以下のドキュメントもあわせて確認してください。

4.1.1 Connection String Parameters
https://www.enterprisedb.com/docs/en/9.6/dotnet/EDB_Postgres_Advanced_Server_NET_Connector_Guide.1.16.html
続いて、EDBConnectionオブジェクトを用いて実際にEDB Postgresに接続します。

conn.Open();

これで、実際にEDB Postgresへ接続が行われました。なお、逆に切断する場合はCloseを実行します。

conn.Close();

SELECTの実行

続いて、SELECT文を実行し結果を取得してみましょう。SQLを実行するにはEDBCommandを作成します。

'' SQLとEDBConnectionオブジェクトを渡す
Dim command As EDBCommand = New EDBCommand("select empno, ename from emp", conn)

SELECTの結果を扱う方法はいくつかありますが、以下の様にEDBDataReaderを使うケースが一般的です。EDBCommandのExecuteReaderを実行します。

Dim reader As EDBDataReader
' SELECT結果をEDBDataReaderで受け取り
reader = command.ExecuteReader()
' 結果を1行ずつ取得し画面上へ表示
While reader.Read()
    Console.WriteLine(reader.GetString(0) + " " + reader.GetString(1))
End While
reader.Close()

以下は結果例です。

7369 SMITH
7499 ALLEN
7521 WARD
7566 JONES
7654 MARTIN
7698 BLAKE
7782 CLARK
7788 SCOTT
7839 KING
7844 TURNER
7876 ADAMS
7900 JAMES
7902 FORD
7934 MILLER

単純なSELECT文ですが、結果を取得することができました。

DMLの実行

続いてDMLを実行してみます。SELECT文にくらべると結果の取得が必要ありませんのでより容易です。EDBCommandでDML文を作成し、ExecuteNonQueryを実行するだけです。

Dim command As EDBCommand = New EDBCommand("delete from emp where deptno=10", conn)
command.ExecuteNonQuery()

これでだけDMLが実行できます。ただし、複数のDML間でトランザクションを管理する必要がある場合はEDBTransactionオブジェクトが必要です。以下の様にEDBConnectionのBeginTransactionを用いて明示的にトランザクションを開始し処理内容に応じてCommitやRollbackを実行します。

' トランザクションを開始
Dim tran As EDBTransaction = conn.BeginTransaction()
Dim command1 As EDBCommand = New EDBCommand("delete from emp where deptno=10", conn)
command1.ExecuteNonQuery()
:
Dim command3 As EDBCommand = New EDBCommand("delete from emp where deptno=30", conn)
command3.ExecuteNonQuery()
' トランザクションをCommit
tran.Commit()

まとめ

今回は、EDBDataProviderを使用して.NET Framework上のアプリケーションからEDB Postgresを利用する基本的な方法をご紹介しました。他のRDBMSへ接続する処理を書かれた方には違和感のないコードであったと思います。
次回は、バインド変数やプロシージャの実行等のもう少し応用的な利用方法を紹介していきます。

筆者情報

山田 聡 画像

2011年にアシストに入社してからサポートセンターでOracle DatabaseやPostgreSQL、EDB Postgres Advanced Server(EPAS)といったデータベース製品を中心に担当しています。個人的にJavaやNode.js、Python等を触っていますので、PostgreSQLと絡めてアプリケーション周りの情報をお送りしていきます。


■本記事の内容について
 本記事に記載されている製品およびサービス、定義及び条件は、特段の記載のない限り本記事執筆時点のものであり、予告なく変更になる可能性があります。あらかじめご了承ください。

■商標に関して
 ・Oracle®、Java、MySQL及びNetSuiteは、Oracle、その子会社及び関連会社の米国及びその他の国における登録商標です。
 ・Amazon Web Services、AWS、Powered by AWS ロゴ、[およびかかる資料で使用されるその他の AWS 商標] は、Amazon.com, Inc. またはその関連会社の商標です。
  文中の社名、商品名等は各社の商標または登録商標である場合があります。

関連している記事

  • EDB
  • PostgreSQL
2025.11.19

今さら聞けない!?WALアーカイブのベストプラクティス

PostgreSQL開発に多く貢献しているEnterpriseDB社による WALアーカイブ設定に関するベストプラクティスをご紹介します。

  • EDB
  • PostgreSQL
2025.04.16

PostgreSQLの拡張機能「system_stats」のご紹介

EDB社が提供するPostgreSQLの拡張機能「system_stats」はPostgreSQL ユーザーがパフォーマンス問題に取り組む際の非常に強力なツールになります。SQLクエリでOS情報を取得できるため、DBエンジニアにとってはパフォーマンスの監視が格段に簡単になります。テストした結果をご紹介します。

  • EDB
  • PostgreSQL
2025.03.10

意外な落とし穴!アプリケーション⇒DBデータ型によるパフォーマンス影響

PostgreSQLのオプティマイザがインデックスを適切に使用できない理由は様々ですが、本記事ではJDBC⇔PostgreSQL間でデータ型の不一致がインデックスの使用にどういった悪影響を及ぼすかを見ていきます

ページの先頭へ戻る