PR

【VB.NET】データベースに接続しよう!Oracle編

【VB.NET】
広告

はじめに

VB.NETは、Microsoftによって開発されたプログラミング言語であり、.NETフレームワークを利用して強力なアプリケーションを作成するためのツールです。本記事では、VB.NETを使用してOracleデータベースに接続する方法を、具体的なコード例を交えて詳しく解説します。初心者の方でも理解しやすいように、データベース接続の基本からクエリの実行、データの取得方法までを順を追って説明します。

Oracleデータベース接続の準備

必要なツールとライブラリのインストール

Oracleデータベースに接続するためには、いくつかのツールとライブラリが必要です。以下の手順に従って環境を構築しましょう。

  1. Oracleデータベース: データベースがローカルまたはリモートにインストールされている必要があります。
  2. Oracle Data Provider for .NET (ODP.NET): Oracleデータベースと.NETアプリケーションを接続するためのライブラリです。
  3. Visual Studio: VB.NETの開発環境として使用します。

Oracle Data Provider for .NETのインストール

ODP.NETは、NuGetパッケージマネージャーを使用してインストールできます。以下の手順に従ってインストールしてください。

  1. Visual Studioでプロジェクトを開きます。
  2. ソリューションエクスプローラーでプロジェクトを右クリックし、「NuGetパッケージの管理」を選択します。
  3. 「参照」タブで「Oracle.ManagedDataAccess」を検索し、インストールします。

データベースへの接続

接続文字列の構成

Oracleデータベースに接続するためには、接続文字列を正しく構成する必要があります。接続文字列には、データベースのホスト名、ポート番号、サービス名、ユーザー名、パスワードが含まれます。

Dim connectionString As String = "User Id=username;Password=password;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=hostname)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=servicename)));"

この例では、usernamepasswordhostname、およびservicenameを実際のデータベース情報に置き換えてください。

データベース接続の基本

以下のコードは、Oracleデータベースに接続し、接続を開く基本的な方法を示しています。

Imports Oracle.ManagedDataAccess.Client

Module Module1
    Sub Main()
        Dim connectionString As String = "User Id=username;Password=password;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=hostname)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=servicename)));"
        Using connection As New OracleConnection(connectionString)
            Try
                connection.Open()
                Console.WriteLine("接続成功!")
            Catch ex As Exception
                Console.WriteLine("接続エラー: " & ex.Message)
            End Try
        End Using
    End Sub
End Module

このコードでは、OracleConnectionクラスを使用してデータベースに接続し、接続を開いています。Usingステートメントを使用することで、接続が自動的に閉じられるようにしています。

クエリの実行

データの取得

次に、SQLクエリを実行してデータを取得する方法を見てみましょう。

Imports Oracle.ManagedDataAccess.Client

Module Module1
    Sub Main()
        Dim connectionString As String = "User Id=username;Password=password;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=hostname)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=servicename)));"
        Using connection As New OracleConnection(connectionString)
            Try
                connection.Open()
                Dim command As New OracleCommand("SELECT * FROM employees", connection)
                Using reader As OracleDataReader = command.ExecuteReader()
                    While reader.Read()
                        Console.WriteLine("ID: " & reader("employee_id") & ", 名前: " & reader("first_name") & " " & reader("last_name"))
                    End While
                End Using
            Catch ex As Exception
                Console.WriteLine("エラー: " & ex.Message)
            End Try
        End Using
    End Sub
End Module

この例では、OracleCommandクラスを使用してSQLクエリを実行し、OracleDataReaderを使用して結果を読み取っています。reader.Read()メソッドを使用して結果セットを一行ずつ読み取ります。

データの挿入

次に、データをデータベースに挿入する方法を見てみましょう。

Imports Oracle.ManagedDataAccess.Client

Module Module1
    Sub Main()
        Dim connectionString As String = "User Id=username;Password=password;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=hostname)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=servicename)));"
        Using connection As New OracleConnection(connectionString)
            Try
                connection.Open()
                Dim command As New OracleCommand("INSERT INTO employees (employee_id, first_name, last_name) VALUES (1001, 'John', 'Doe')", connection)
                Dim rowsAffected As Integer = command.ExecuteNonQuery()
                Console.WriteLine(rowsAffected & " 行が挿入されました。")
            Catch ex As Exception
                Console.WriteLine("エラー: " & ex.Message)
            End Try
        End Using
    End Sub
End Module

この例では、INSERT文を使用して新しいレコードをemployeesテーブルに挿入しています。ExecuteNonQueryメソッドを使用してSQLコマンドを実行し、影響を受けた行数を取得します。

パラメータ化クエリ

SQLインジェクション対策

パラメータ化クエリを使用すると、SQLインジェクション攻撃を防ぐことができます。以下の例では、パラメータを使用して安全にデータを挿入しています。

Imports Oracle.ManagedDataAccess.Client

Module Module1
    Sub Main()
        Dim connectionString As String = "User Id=username;Password=password;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=hostname)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=servicename)));"
        Using connection As New OracleConnection(connectionString)
            Try
                connection.Open()
                Dim command As New OracleCommand("INSERT INTO employees (employee_id, first_name, last_name) VALUES (:employee_id, :first_name, :last_name)", connection)
                command.Parameters.Add(New OracleParameter("employee_id", 1002))
                command.Parameters.Add(New OracleParameter("first_name", "Jane"))
                command.Parameters.Add(New OracleParameter("last_name", "Smith"))
                Dim rowsAffected As Integer = command.ExecuteNonQuery()
                Console.WriteLine(rowsAffected & " 行が挿入されました。")
            Catch ex As Exception
                Console.WriteLine("エラー: " & ex.Message)
            End Try
        End Using
    End Sub
End Module

この例では、OracleParameterクラスを使用してパラメータを追加しています。これにより、ユーザー入力を直接SQL文に組み込むことなく、データベース操作が安全に行えます。

データの更新

次に、既存のレコードを更新する方法を見てみましょう。

Imports Oracle.ManagedDataAccess.Client

Module Module1
    Sub Main()
        Dim connectionString As String = "User Id=username;Password=password;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=hostname)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=servicename)));"
        Using connection As New OracleConnection(connectionString)
            Try
                connection.Open()
                Dim command As New OracleCommand("UPDATE employees SET first_name = :first_name WHERE employee_id = :employee_id", connection)
                command.Parameters.Add(New OracleParameter("first_name", "Johnathan"))
                command.Parameters.Add(New OracleParameter("employee_id", 1001))
                Dim rowsAffected As Integer = command.ExecuteNonQuery()
                Console.WriteLine(rowsAffected & " 行が更新されました。")
            Catch ex As Exception
                Console.WriteLine("エラー: " & ex.Message)
            End Try
        End Using
    End Sub
End Module

この例では、UPDATE文を使用してemployeesテーブルの特定のレコードを更新しています。パラメータを使用してSQL文を安全に構築しています。

データの削除

最後に、データベースからレコードを削除する方法を見てみましょう。

Imports Oracle.ManagedDataAccess.Client

Module Module1
    Sub Main()
        Dim connectionString As String = "User Id=username;Password=password;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=hostname)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=servicename)));"
        Using connection As New OracleConnection(connectionString)
            Try
                connection.Open()
                Dim command As New OracleCommand("DELETE FROM employees WHERE employee_id = :employee_id", connection)
                command.Parameters.Add(New OracleParameter("employee_id", 1001))
                Dim rowsAffected As Integer = command.ExecuteNonQuery()
                Console.WriteLine(rowsAffected & " 行が削除されました。")
            Catch ex As Exception
                Console.WriteLine("エラー: " & ex.Message)
            End Try
        End Using
    End Sub
End Module

この例では、DELETE文を使用してemployeesテーブルの特定のレコードを削除しています。パラメータを使用してSQL文を安全に構築しています。

エラーハンドリング

データベース操作中に発生する可能性のあるエラーを適切に処理するためには、エラーハンドリングが重要です。例外処理を使用して、エラーをキャッチし、適切なメッセージを表示する方法を見てみましょう。

Imports Oracle.ManagedDataAccess.Client

Module Module1
    Sub Main()
        Dim connectionString As String = "User Id=username;Password=password;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=hostname)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=servicename)));"
        Using connection As New OracleConnection(connectionString)
            Try
                connection.Open()
                ' SQL操作を実行
                Dim command As New OracleCommand("SELECT * FROM employees", connection)
                Using reader As OracleDataReader = command.ExecuteReader()
                    While reader.Read()
                        Console.WriteLine("ID: " & reader("employee_id") & ", 名前: " & reader("first_name") & " " & reader("last_name"))
                    End While
                End Using
            Catch ex As OracleException
                Console.WriteLine("Oracleエラー: " & ex.Message)
            Catch ex As Exception
                Console.WriteLine("一般的なエラー: " & ex.Message)
            End Try
        End Using
    End Sub
End Module

この例では、OracleExceptionをキャッチしてOracleデータベース固有のエラーメッセージを表示し、一般的なExceptionをキャッチしてその他のエラーメッセージを表示しています。

まとめ

本記事では、VB.NETを使用してOracleデータベースに接続する方法について解説しました。接続文字列の構成から、データの取得、挿入、更新、削除の方法、そしてエラーハンドリングについて具体的なコード例を交えて説明しました。これらの技術を理解することで、VB.NETアプリケーションとOracleデータベースの連携がスムーズに行えるようになります。この記事を参考にして、実際のプロジェクトでOracleデータベースを活用してみてください。

広告
【VB.NET】
広告
タイトルとURLをコピーしました