PR

【C#】データベースに接続しよう!Oracle編

【C#】
広告

はじめに

データベースとの接続は、現代のアプリケーション開発において必須のスキルです。特にOracleデータベースは、企業で広く利用されており、その操作方法を学ぶことは多くのC#開発者にとって非常に価値があります。この記事では、C#からOracleデータベースに接続し、データを操作する基本的な方法をステップバイステップで説明します。開始する前に、Oracle Data Provider for .NET (ODP.NET)がインストールされていることを確認してください。

Oracleデータベースへの接続

必要なツールとライブラリ

C#でOracleデータベースに接続するためには、Oracle Data Provider for .NET (ODP.NET) を使用します。ODP.NETは、Oracleのデータベース機能を.NETアプリケーションから利用できるようにするライブラリです。NuGetパッケージマネージャーを通じて、ODP.NETをプロジェクトに追加できます。

接続の設定

Oracleデータベースへの接続を開始するには、接続文字列が必要です。接続文字列には、データベースサーバーのアドレス、ポート番号、データベース名、ユーザー名、パスワードなどが含まれます。以下は、接続文字列の一般的な形式です。

string connectionString = "User Id=<ユーザー名>;Password=<パスワード>;Data Source=<データソース>";

<データソース> は、通常、<ホスト名>:<ポート>/<サービス名> の形式で指定します。

接続の確立

Oracleデータベースへの接続を確立するためには、OracleConnection クラスのインスタンスを作成し、接続文字列を指定して開きます。

using Oracle.ManagedDataAccess.Client;

class Program {
    static void Main() {
        string connectionString = "User Id=myusername;Password=mypassword;Data Source=mydatasource";
        using (OracleConnection conn = new OracleConnection(connectionString)) {
            try {
                conn.Open();
                Console.WriteLine("データベース接続成功!");
            } catch (Exception ex) {
                Console.WriteLine("接続に失敗しました: " + ex.Message);
            }
        }
    }
}

コードの構造と解説

  1. Oracleデータアクセスの名前空間のインポート:
   using Oracle.ManagedDataAccess.Client;
  • この行では、Oracleの.NETデータプロバイダであるODP.NETを使用するために必要な名前空間Oracle.ManagedDataAccess.Clientをインポートしています。これにより、OracleConnectionなどのクラスが利用可能になります。
  1. クラスとメソッドの定義:
   class Program {
       static void Main() {
           // コード本体
       }
   }
  • Programというクラスを定義し、その中にMainメソッドがあります。Mainメソッドはプログラムのエントリーポイントで、プログラム実行時に自動的に呼び出されるメソッドです。
  1. 接続文字列の定義:
   string connectionString = "User Id=myusername;Password=mypassword;Data Source=mydatasource";
  • データベース接続に必要な情報を文字列として定義しています。ここにはユーザー名、パスワード、データソース(データベースサーバーの位置やデータベース名など)が含まれます。
  1. データベース接続の試み:
   using (OracleConnection conn = new OracleConnection(connectionString)) {
       try {
           conn.Open();
           Console.WriteLine("データベース接続成功!");
       } catch (Exception ex) {
           Console.WriteLine("接続に失敗しました: " + ex.Message);
       }
   }
  • usingステートメントを使用してOracleConnectionオブジェクトconnを作成しています。これは、データベースとの接続を管理します。usingステートメントは、ブロックの終わりに自動的にリソースを解放するため、データベース接続のクローズも自動で行われます。
  • conn.Open()メソッドを呼び出してデータベースに接続を試みます。このメソッドが成功すれば、コンソールに”データベース接続成功!”と出力されます。
  • try-catchブロックを使用して例外を捕捉しています。接続の試みで何か問題が発生した場合(例えば、認証情報が間違っている、ネットワークの問題など)、例外が投げられ、そのエラーメッセージがコンソールに出力されます。

データの操作

データの読み込み

データベースからデータを読み込むには、OracleCommand クラスを使用し、SQLクエリを実行します。その後、OracleDataReader を使用して結果を読み取ります。

using System;
using Oracle.ManagedDataAccess.Client;

class Program {
    static void Main() {
        string connectionString = "User Id=myusername;Password=mypassword;Data Source=mydatasource";
        using (OracleConnection conn = new OracleConnection(connectionString)) {
            conn.Open();
            string sql = "SELECT name, age FROM employees";
            using (OracleCommand cmd = new OracleCommand(sql, conn)) {
                using (OracleDataReader reader = cmd.ExecuteReader()) {
                    while (reader.Read()) {
                        string name = reader.GetString(0);
                        int age = reader.GetInt32(1);
                        Console.WriteLine($"名前: {name}, 年齢: {age}");
                    }
                }
            }
        }
    }
}

コードの構造と解説

  1. 名前空間のインポート:
   using System;
   using Oracle.ManagedDataAccess.Client;
  • System 名前空間は、C#プログラミングにおいて基本的なクラスとメソッド(例えばConsoleクラス)を提供します。
  • Oracle.ManagedDataAccess.Client 名前空間は、Oracleデータベースへのアクセスに必要なクラス(例えばOracleConnection)を含んでいます。
  1. プログラムのエントリーポイント:
   class Program {
       static void Main() {
           // コード本体
       }
   }
  • Programクラスとその中のMainメソッドは、C#プログラムの標準的な入口点です。プログラムの実行が開始される場所です。
  1. データベース接続:
   string connectionString = "User Id=myusername;Password=mypassword;Data Source=mydatasource";
   using (OracleConnection conn = new OracleConnection(connectionString)) {
       conn.Open();
       // 以下、データ操作
   }
  • connectionStringはデータベースに接続するための詳細(ユーザーID、パスワード、データソース)を含みます。
  • OracleConnectionオブジェクトはこの接続文字列を使ってデータベースに接続します。usingステートメントは、作業が完了した後で接続を自動的に閉じることを保証します。
  1. SQLクエリの実行:
   string sql = "SELECT name, age FROM employees";
   using (OracleCommand cmd = new OracleCommand(sql, conn)) {
       using (OracleDataReader reader = cmd.ExecuteReader()) {
           // データの読み取り
       }
   }
  • sql変数はデータベースから名前と年齢を選択するSQL文を保持します。
  • OracleCommandオブジェクトはこのSQLクエリをデータベースに対して実行するために使用されます。ここでもusingステートメントが使われ、コマンドのリソースが適切に管理されます。
  1. データの読み取り:
   while (reader.Read()) {
       string name = reader.GetString(0);
       int age = reader.GetInt32(1);
       Console.WriteLine($"名前: {name}, 年齢: {age}");
   }
  • OracleDataReaderオブジェクトを使用して、クエリの結果を行ごとに読み取ります。
  • Readメソッドは、読み取るべきデータがまだあるかどうかをチェックし、各行に対して繰り返し処理を行います。
  • GetStringGetInt32メソッドは、それぞれ文字列と整数のデータを読み取ります。これらのメソッドの引数(0と1)は、選択した列の位置(0から始まる)を指定します。
  • Console.WriteLineで読み取ったデータをコンソールに出力します。

データの追加

データベースに新しいデータを追加するためには、INSERT ステートメントを使用します。これも OracleCommand クラスを利用して行います。

using System;
using Oracle.ManagedDataAccess.Client;

class Program {
    static void Main() {
        string connectionString = "User Id=myusername;Password=mypassword;Data Source=mydatasource";
        using (OracleConnection conn = new OracleConnection(connectionString)) {
            conn.Open();
            string sql = "INSERT INTO employees (name, age) VALUES ('新しい社員', 30)";
            using (OracleCommand cmd = new OracleCommand(sql, conn)) {
                int result = cmd.ExecuteNonQuery();
                if (result > 0) {
                    Console.WriteLine("データ追加成功!");
                } else {
                    Console.WriteLine("データ追加失敗!");
                }
            }
        }
    }
}

コードの構造と解説

  1. 名前空間のインポート:
   using System;
   using Oracle.ManagedDataAccess.Client;
  • System 名前空間は、基本的なシステム関連の機能を提供します。ここでは主にConsoleクラスが使用されています。
  • Oracle.ManagedDataAccess.Client 名前空間は、Oracleデータベースへのアクセスを管理するためのクラス群を提供します。特にOracleConnectionOracleCommandなどが含まれます。
  1. プログラムのエントリーポイント:
   class Program {
       static void Main() {
           // コード本体
       }
   }
  • ここで定義されているのは、プログラムが実行されるときに最初に呼ばれるMainメソッドです。
  1. データベース接続の設定:
   string connectionString = "User Id=myusername;Password=mypassword;Data Source=mydatasource";
   using (OracleConnection conn = new OracleConnection(connectionString)) {
       conn.Open();
       // 以下、データ操作
   }
  • connectionStringはデータベースへの接続に必要な情報を含んでいます。これにはユーザー名、パスワード、データソース(サーバー情報など)が含まれます。
  • OracleConnectionオブジェクトを使用してデータベースに接続します。usingステートメントは、この接続を自動的に閉じるためのものです。
  1. SQLコマンドの実行:
   string sql = "INSERT INTO employees (name, age) VALUES ('新しい社員', 30)";
   using (OracleCommand cmd = new OracleCommand(sql, conn)) {
       int result = cmd.ExecuteNonQuery();
       if (result > 0) {
           Console.WriteLine("データ追加成功!");
       } else {
           Console.WriteLine("データ追加失敗!");
       }
   }
  • sql変数にはデータベースにデータを挿入するためのSQL文が格納されています。
  • OracleCommandオブジェクトを使用して、このSQL文を実行します。コマンドオブジェクトはconn(データベース接続)を利用してデータベースに対して命令を送ります。
  • ExecuteNonQueryメソッドはINSERT、UPDATE、DELETEなどの非クエリSQL文の実行に使用され、影響を受けた行の数を返します。
  • resultが0より大きい場合は、挿入が成功したことを意味し、それに応じて成功または失敗のメッセージがコンソールに出力されます。

データの更新と削除

データを更新または削除する場合も、同様に OracleCommand を使用しますが、SQLクエリは UPDATEDELETE ステートメントを使用します。

// データ更新の例
string updateSql = "UPDATE employees SET age = 35 WHERE name = '新しい社員'";

// データ削除の例
string deleteSql = "DELETE FROM employees WHERE name = '新しい社員'";

まとめ

この記事では、C#からOracleデータベースに接続し、基本的なCRUD操作を行う方法を紹介しました。ODP.NETの使用方法を学び、実際のアプリケーションでデータベース操作を行う基礎をマスターしました。これらの基本をしっかりと理解し、実践することで、C#によるデータベースプログラミングのスキルを向上させることができます。

広告
【C#】
広告
タイトルとURLをコピーしました