はじめに
データベースとの接続は、現代のアプリケーション開発において必須のスキルです。特に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);
}
}
}
}
コードの構造と解説
- Oracleデータアクセスの名前空間のインポート:
using Oracle.ManagedDataAccess.Client;
- この行では、Oracleの.NETデータプロバイダであるODP.NETを使用するために必要な名前空間
Oracle.ManagedDataAccess.Clientをインポートしています。これにより、OracleConnectionなどのクラスが利用可能になります。
- クラスとメソッドの定義:
class Program {
static void Main() {
// コード本体
}
}
Programというクラスを定義し、その中にMainメソッドがあります。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);
}
}
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}");
}
}
}
}
}
}
コードの構造と解説
- 名前空間のインポート:
using System;
using Oracle.ManagedDataAccess.Client;
System名前空間は、C#プログラミングにおいて基本的なクラスとメソッド(例えばConsoleクラス)を提供します。Oracle.ManagedDataAccess.Client名前空間は、Oracleデータベースへのアクセスに必要なクラス(例えばOracleConnection)を含んでいます。
- プログラムのエントリーポイント:
class Program {
static void Main() {
// コード本体
}
}
Programクラスとその中のMainメソッドは、C#プログラムの標準的な入口点です。プログラムの実行が開始される場所です。
- データベース接続:
string connectionString = "User Id=myusername;Password=mypassword;Data Source=mydatasource";
using (OracleConnection conn = new OracleConnection(connectionString)) {
conn.Open();
// 以下、データ操作
}
connectionStringはデータベースに接続するための詳細(ユーザーID、パスワード、データソース)を含みます。OracleConnectionオブジェクトはこの接続文字列を使ってデータベースに接続します。usingステートメントは、作業が完了した後で接続を自動的に閉じることを保証します。
- 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ステートメントが使われ、コマンドのリソースが適切に管理されます。
- データの読み取り:
while (reader.Read()) {
string name = reader.GetString(0);
int age = reader.GetInt32(1);
Console.WriteLine($"名前: {name}, 年齢: {age}");
}
OracleDataReaderオブジェクトを使用して、クエリの結果を行ごとに読み取ります。Readメソッドは、読み取るべきデータがまだあるかどうかをチェックし、各行に対して繰り返し処理を行います。GetStringとGetInt32メソッドは、それぞれ文字列と整数のデータを読み取ります。これらのメソッドの引数(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("データ追加失敗!");
}
}
}
}
}
コードの構造と解説
- 名前空間のインポート:
using System;
using Oracle.ManagedDataAccess.Client;
System名前空間は、基本的なシステム関連の機能を提供します。ここでは主にConsoleクラスが使用されています。Oracle.ManagedDataAccess.Client名前空間は、Oracleデータベースへのアクセスを管理するためのクラス群を提供します。特にOracleConnectionやOracleCommandなどが含まれます。
- プログラムのエントリーポイント:
class Program {
static void Main() {
// コード本体
}
}
- ここで定義されているのは、プログラムが実行されるときに最初に呼ばれる
Mainメソッドです。
- データベース接続の設定:
string connectionString = "User Id=myusername;Password=mypassword;Data Source=mydatasource";
using (OracleConnection conn = new OracleConnection(connectionString)) {
conn.Open();
// 以下、データ操作
}
connectionStringはデータベースへの接続に必要な情報を含んでいます。これにはユーザー名、パスワード、データソース(サーバー情報など)が含まれます。OracleConnectionオブジェクトを使用してデータベースに接続します。usingステートメントは、この接続を自動的に閉じるためのものです。
- 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クエリは UPDATE や DELETE ステートメントを使用します。
// データ更新の例
string updateSql = "UPDATE employees SET age = 35 WHERE name = '新しい社員'";
// データ削除の例
string deleteSql = "DELETE FROM employees WHERE name = '新しい社員'";
まとめ
この記事では、C#からOracleデータベースに接続し、基本的なCRUD操作を行う方法を紹介しました。ODP.NETの使用方法を学び、実際のアプリケーションでデータベース操作を行う基礎をマスターしました。これらの基本をしっかりと理解し、実践することで、C#によるデータベースプログラミングのスキルを向上させることができます。

