Symfoware

Symfowareについての考察blog

C#からOracle 11g XEへODP.NETで接続

Oracle 11g XEをUbuntuへインストール。
テーブルを作成してみました。

Ubuntu Server 16.04にOracle Database Express Edition 11g Release 2をインストール
Oracle 11g XE ユーザー(スキーマ)とテーブルの作成


この環境へC#から接続してみようと思います。
OSはWindows Server 2016を使用しました。


.Net Provider



接続用のドライバを取得します。
こちらから「ODP.NET_Managed_ODAC122cR1.zip」をダウンロード。
http://www.oracle.com/technetwork/topics/dotnet/downloads/index.html

803_01.png

803_02.png

解答したフォルダの「odp.net/managed/common」にある
「Oracle.ManagedDataAccess.dll」を使用すればデータベースに接続できます。

803_03.png

このdllをこれから作成するソースファイルと同じ階層に保存しておきます。




接続文字列



接続文字列に何を指定すればよいか?
こちらが参考になりました。
ODP.NET の接続文字列


ID:orauser
Password:Passw0rd
HOST:192.168.1.101
PORT:1521



この条件でOracle 11g XEに接続する場合の接続文字列はこうなります。


User ID=orauser;
Password=Passw0rd;
Data Source=
(DESCRIPTION = (ADDRESS_LIST = (ADDRESS=(PROTOCOL = TCP)(HOST = 192.168.1.101)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = XE)));






サンプル



サンプルプログラムは以下のようになりました。

・Sample.cs


  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using Oracle.ManagedDataAccess.Client;
  5.     
  6. public class Sample {
  7.         
  8.     [STAThread]
  9.     public static void Main(string[] args) {
  10.         
  11.         OracleConnection con = new OracleConnection();
  12.         string dataSource = "(DESCRIPTION = (ADDRESS_LIST = (ADDRESS=(PROTOCOL = TCP)(HOST = 192.168.1.101)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = XE)))";
  13.         
  14.         con.ConnectionString = "User ID=orauser; Password=Passw0rd; Data Source=" + dataSource + ";";
  15.         con.Open();
  16.         
  17.         string sql = "SELECT * FROM sample";
  18.         OracleCommand cmd = new OracleCommand(sql, con);
  19.         
  20.         OracleDataReader reader = cmd.ExecuteReader();
  21.         while ( reader.Read() ) {
  22.             Console.WriteLine(string.Format("{0}:{1}", reader["id"], reader["val"]));
  23.         }
  24.         
  25.         reader.Close();
  26.         con.Close();
  27.         
  28.     }
  29. }





統合開発環境をインストールしていないので、こんなバッチファイルを作成してコンパイルしました。

・build.bat


@echo off
set csc="C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe"
set opt=/nologo
set recurse=/r:Oracle.ManagedDataAccess.dll

%csc% %opt% %recurse% Sample.cs





コンパイル&実行してみます。

803_04.png

動いてくれました。





DataAdapterを使用したサンプル



DataReaderではなくDataAdapterを使用したサンプルはこのようになりました。


  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using Oracle.ManagedDataAccess.Client;
  5.     
  6. public class Sample {
  7.         
  8.     [STAThread]
  9.     public static void Main(string[] args) {
  10.         
  11.         OracleConnection con = new OracleConnection();
  12.         string dataSource = "(DESCRIPTION = (ADDRESS_LIST = (ADDRESS=(PROTOCOL = TCP)(HOST = 192.168.1.101)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = XE)))";
  13.         
  14.         con.ConnectionString = "User ID=orauser; Password=Passw0rd; Data Source=" + dataSource + ";";
  15.         con.Open();
  16.         
  17.         string sql = "SELECT * FROM sample";
  18.         OracleCommand cmd = new OracleCommand(sql, con);
  19.         
  20.         /*
  21.         OracleDataReader reader = cmd.ExecuteReader();
  22.         while ( reader.Read() ) {
  23.             Console.WriteLine(string.Format("{0}:{1}", reader["id"], reader["val"]));
  24.         }
  25.         
  26.         reader.Close();
  27.         */
  28.         
  29.         OracleDataAdapter adapter = new OracleDataAdapter(cmd);
  30.         DataSet ds = new DataSet();
  31.         adapter.Fill(ds);
  32.         
  33.         foreach(DataRow dr in ds.Tables[0].Rows) {
  34.             Console.WriteLine(string.Format("{0}:{1}", dr["id"], dr["val"]));
  35.         }
  36.         
  37.         con.Close();
  38.         
  39.     }
  40. }




実行結果はDataReaderを使用した場合と同様です。


【参考URL】

【C#】Oracleへの接続をクライアントインストール無しで行う
ODP.NET の接続文字列
[ ODP.NET ] Oracle へ接続し SQL を発行する (OracleConnection / OracleCommand)
関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2017/11/08(水) 22:05:54|
  2. Oracle
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<IIS 10.0 + C#で自作したHTTPハンドラー(IHttpHandle)を動作させる | ホーム | Oracle 11g XEへJava(JDBC)で接続>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/2066-549d294d
この記事にトラックバックする(FC2ブログユーザー)