Developing .NET Applications for Oracle Database (On-Premises)

これらのチュートリアルでは、Oracle Data Provider for .NET Coreを使用して、コマンドライン、Visual Studio Code、およびVisual Studio環境で.NETアプリケーションをOracle Database(オンプレミス)に接続する方法を紹介します。また、Visual StudioとOracle Data Provider for .NETを使用して、.NET FrameworkアプリケーションをOracle Database(オンプレミス)に接続する方法についても説明します。Oracle Autonomous Databaseを使用したチュートリアルについては、『Oracle Autonomous Databaseのための.NETアプリケーションの開発』を参照してください。


    .NET Core Command Line

    すべて開く すべて閉じる

    このチュートリアルでは、Oracle Data Provider for .NET (ODP.NET) Coreを使用して、コマンドライン経由で.NET CoreアプリケーションをOracleデータベースに接続する方法を紹介します。以下の手順に従ってください。

  • 1.Oracle Databaseのインストール

    Oracle Databaseにまだアクセスできない場合は、以下のリンクをクリックしてOracle Database Express Edition(XE)をインストールします。(代わりにAlways Free Oracle Autonomous Databaseを使用する場合は、Developing .NET Applications for Oracle Autonomous Databaseチュートリアルを参照してください。)

    • 以下の手順に従って、Oracle Database XEをダウンロードしてインストールします。
    その他のリソース:
  • 2..NET Core SDKのインストール

    • .NET Core SDK3.1以上がインストールされていない場合は、ダウンロードしてインストールします。
  • 3. データベース・ユーザーの作成(オプション)

    このアプリケーションには、新しいデータベース・ユーザーを使用することをお勧めします。新しいユーザーのスキーマに「To Do」表を格納します。ユーザーの作成と権限の割り当てに慣れていない場合は、以下の[Create User ODP.NET Core]アプリを実行してください。このアプリは、データベース管理者に代わってコマンドラインから新しいデータベース・ユーザーを作成します。このツールは、オンプレミス・データベースまたは TCP 接続のクラウド・データベースを対象としています。.NET Core 3.1以上が必要です。

    また、新しいユーザーを作成したくない場合は、既存のユーザースキーマからステップ4のサンプルコードを実行することもできます。

    • コマンドラインから、Create Userアプリ用に新しいディレクトリを作成し、そのディレクトリに移動します。
    • dotnet 実行ファイルを使用して新しいプロジェクトを作成します(以下の例のコードボックスの右下隅にあるコピーボタンをクリックして、内容をコピーして貼り付けます)。
      dotnet new console
    • ODP.NET Coreをプロジェクトに追加します。
      dotnet add package Oracle.ManagedDataAccess.Core
    • テキスト・エディタでProgram.csを開きます。
    • Program.csファイルの内容を次のコードに置き換えます。
      using System;
      using Oracle.ManagedDataAccess.Client;
      
      namespace Create_User
      {
          class Program
          {
              //Set the net service name, Easy Connect, or connect descriptor of the pluggable DB, 
              // such as "localhost/XEPDB1" for 18c XE or higher
              public static string db = "<localhost/XEPDB1>";
      
              //Provide the DBA's user id, password, and role to create the demo user
              //If admin has no role, then set to empty string
              public static string sysUser = "<SYS>";
              public static string sysPwd = "<Admin PASSWORD>";
              public static string role = "<SYSDBA>";
      
              //Set the demo user id, such as DEMODOTNET and password
              public static string user = "<DEMODOTNET>";
              public static string pwd = "<PASSWORD>";
      
              static void Main()
              {
                  //Create connection string. Check whether DBA Privilege is required.
                  string conStringDBA;
                  if (role == "")
                      conStringDBA = "User Id=" + sysUser + ";Password=" + sysPwd + ";Data Source=" + db + ";";
                  else
                      conStringDBA = "User Id=" + sysUser + ";Password=" + sysPwd + ";DBA Privilege=" + role + ";Data Source=" + db + ";";
      
                  using (OracleConnection con = new OracleConnection(conStringDBA))
                  {
                      using (OracleCommand cmd = con.CreateCommand())
                      {
                          try
                          {
                              con.Open();
                              Console.WriteLine("Successfully connected to Oracle Database");
                              Console.WriteLine();
      
                              //Modify the anonymous PL/SQL GRANT command if you wish to modify the privileges granted
                              cmd.CommandText = "BEGIN " +
                                  "EXECUTE IMMEDIATE ('CREATE USER " + user + " IDENTIFIED BY " + pwd + 
                                    " DEFAULT TABLESPACE USERS QUOTA UNLIMITED ON USERS'); " +
                                  "EXECUTE IMMEDIATE ('GRANT CREATE SESSION, CREATE VIEW, CREATE SEQUENCE, CREATE PROCEDURE, " + 
                                     "CREATE TABLE, CREATE TRIGGER, CREATE TYPE, CREATE MATERIALIZED VIEW TO " + user + "'); " +
                                  "END;";
                              cmd.ExecuteNonQuery();
      
                              Console.WriteLine(user + " user created");
                              Console.WriteLine();
                          }
                          catch (Exception ex)
                          {
                              Console.WriteLine(ex.Message);
                          }
                      }
                  }
              }
          }
      }
    • Program.csを変更して、DB接続情報を含めます。
      • データソース: プラガブル・データベースに接続するためのネットサービス名、Easy Connectまたは接続記述子を入力します。Oracle Database XEがローカルマシンにある場合は、Easy Connectの「localhost/XEPDB1」をデータソースとして使用します。
      • 管理者ユーザ ID: ユーザを作成し、SYSDBA などの権限を割り当てる権限を持つ管理者ユーザ名を入力します。
      • 管理者パスワード: 管理者のパスワードを入力します。
      • 管理者ロール: 管理者のロール(SYSDBA など)を入力します。割り当てるロールがない場合は空白のままにします。
      • ユーザー ID: DEMODOTNET など、「To Do」表を保存するユーザー名を入力します
      • パスワード: ユーザーのパスワードを入力します。
      注: 新しいユーザーには、USERS表領域へのアクセス権が付与されます。別の表領域を使用する場合は、CREATE USERコマンドを変更します。
    • Program.csに変更を保存します。
    • アプリケーションを実行します。
      dotnet run
    • データベースに接続し、新しいユーザーが作成されたというメッセージが表示されます。
  • 4..NETコア・アプリケーションの構築と実行

      簡単なデータベース・スキーマをセットアップしてデータを追加し、.NET Coreアプリを使って表から結果を選択する準備が整いました。基本的な作業予定リストアプリを作成します。作業予定品目は、タスクのリストおよびタスクの完了を追跡するデータベース表に格納されます。

    • コマンド行から、アプリケーション用に新しいディレクトリを作成し、そのディレクトリに移動します。
    • dotnet 実行ファイルを使用して新しいプロジェクトを作成します(以下の例のコードボックスの右下隅にあるコピーボタンをクリックして、内容をコピーして貼り付けます)。
      dotnet new console
    • ODP.NET Coreをプロジェクトに追加します。
      dotnet add package Oracle.ManagedDataAccess.Core
    • テキスト・エディタでProgram.csを開きます。
    • Program.csファイルの内容を次のコードに置き換えます。
      using System;
      using System.Data;
      using Oracle.ManagedDataAccess.Client;
      
      namespace ODP.NET_Core_Get_Started
      {
          class GettingStarted
          {
              //Prerequisite: This app assumes the user has already been created with the
              // necessary privileges
              //Set the demo user id, such as DEMODOTNET and password
              public static string user = "<DEMODOTNET>";
              public static string pwd = "<PASSWORD>";
      
              //Set the net service name, Easy Connect, or connect descriptor of the pluggable DB, 
              // such as "localhost/XEPDB1" for 18c XE or higher
              public static string db = "<localhost/XEPDB1>";
      
              static void Main()
              {
                  string conStringUser = "User Id=" + user + ";Password=" + pwd + ";Data Source=" + db + ";";
      
                  using (OracleConnection con = new OracleConnection(conStringUser))
                  {
                      using (OracleCommand cmd = con.CreateCommand())
                      {
                          try
                          {
                              con.Open();
                              Console.WriteLine("Successfully connected to Oracle Database as " + user);
                              Console.WriteLine();
      
                              //Create the sample table. Checks if table already exists
                              cmd.CommandText = "DECLARE tableExists INTEGER; " +
                                  "BEGIN " +
                                  "SELECT count(*) into tableExists FROM user_tables where table_name = 'TODOITEM';" +
                                  "IF (tableExists = 0) THEN " +
                                  "EXECUTE IMMEDIATE ('CREATE TABLE todoitem (id NUMBER GENERATED ALWAYS AS IDENTITY, " + 
                                    "description VARCHAR2(4000), creation_ts TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, " + 
                                    "done NUMBER(1, 0), PRIMARY KEY(id))'); " +
                                  "END IF; END;";
                              cmd.ExecuteNonQuery();
      
                              //Insert sample data
                              String[] description = { "Task 1", "Task 2", "Task 3", "Task 4", "Task 5" };
                              int[] done = new int[5] { 0, 0, 1, 0, 1 };
      
                              cmd.CommandText = "INSERT INTO todoitem (description, done) VALUES(:descrip, :done)";
                              cmd.ArrayBindCount = 5;
                              cmd.BindByName = true;
      
                              OracleParameter descripParam = new OracleParameter("descrip", OracleDbType.Varchar2);
                              descripParam.Direction = ParameterDirection.Input;
                              descripParam.Value = description;
                              cmd.Parameters.Add(descripParam);
      
                              OracleParameter doneParam = new OracleParameter("done", OracleDbType.Int16);
                              doneParam.Direction = ParameterDirection.Input;
                              doneParam.Value = done;
                              cmd.Parameters.Add(doneParam);
      
                              cmd.ExecuteNonQuery();
                              Console.WriteLine("{0} Rows Inserted", cmd.ArrayBindCount);
                              Console.WriteLine();
      
                              //Retrieve sample data
                              cmd.CommandText = "SELECT description, done FROM todoitem";
                              OracleDataReader reader = cmd.ExecuteReader();
                              while (reader.Read())
                              {
                                  if (reader.GetBoolean(1))
                                      Console.WriteLine(reader.GetString(0) + " is done.");
                                  else
                                      Console.WriteLine(reader.GetString(0) + " is NOT done.");
                              }
      
                              descripParam.Dispose();
                              doneParam.Dispose();
                              reader.Dispose();
                          }
                          catch (Exception ex)
                          {
                              Console.WriteLine(ex.Message);
                          }
                      }
                  }
              }
          }
      }
    • Program.csを変更して、DB接続情報を含めます。
      • ユーザー ID: DEMODOTNET など、「To Do」表を保存するユーザー名を入力します
      • パスワード: ユーザーのパスワードを入力します。
      • データソース: プラガブル・データベースに接続するためのネットサービス名、Easy Connectまたは接続記述子を入力します。Oracle Database XEがローカルマシンにある場合は、Easy Connectの「localhost/XEPDB1」をデータソースとして使用します。
    • Program.csに変更を保存します。
    • アプリケーションを実行します。
      dotnet run
    • データベースに接続し、5つの行が挿入され、各タスクの完了ステータスを含むタスクリストがコンソールに返されたというメッセージが表示されるはずです。おめでとうございます。Oracle Databaseへの問合せが正常に完了しました。

    Visual Studio Codeを使用した.NET Core

    すべて開く すべて閉じる

    このチュートリアルでは、Oracle Data Provider for .NET (ODP.NET) Core、Visual Studio CodeおよびOracle Developer Tools for VS Code拡張機能を使用して、.NET CoreアプリケーションをOracle Databasesに接続する方法を示します。以下の手順に従ってください。

  • 1.Oracle Databaseのインストール

    Oracle Databaseにまだアクセスできない場合は、以下のリンクをクリックしてOracle Database Express Edition(XE)をインストールします。(代わりにAlways Free Oracle Autonomous Databaseを使用する場合は、Developing .NET Applications for Oracle Autonomous Databaseチュートリアルを参照してください。)

    • 以下の手順に従って、Oracle Database XEをダウンロードしてインストールします。
    その他のリソース:
  • 2..NET Core SDKのインストール

    • .NET Core SDK3.1以上がインストールされていない場合は、ダウンロードしてインストールします。
  • 3. Oracle Developer Tools for VS Codeのインストール

    • Visual Studio Codeを起動します。(インストールがまだの場合は、Visual Studio Codeをインストールします。)
    • Visual Studio Codeの左側にあるActivity BarのアイコンをクリックしてExtensions Marketplaceを開くか、「View: Show Extensions」コマンド(Ctrl+Shift+X)を使用します。
    • Marketplace検索テキストボックスに oracleと入力し、Returnキーを押します。
    • Oracle Developer Tools for VS Code拡張機能を見つけ、それをクリックして拡張機能のページを開きます。
    • 拡張機能をインストールするには、「インストール」ボタンをクリックします。インストール中、お使いのマシンにインストールされている .NET Core Runtime のバージョンによっては、特定のバージョンのインストールを促される場合があります。
    • Visual Studio Codeを閉じ、再度開きます。
  • 4. データベース・ユーザーの作成(オプション)

    このウォークスルーで作成するアプリケーションで、新しいデータベース・ユーザーを使用することをお薦めします。新しいユーザーのスキーマに「To Do」表を格納します。ユーザーの作成と権限の割り当てに慣れていない場合は、以下の手順に従って、Visual Studio Codeを使用してデータベース管理者としてログインし、新しいデータベース・ユーザーを作成するために必要なSQLを実行してください。

    また、新しいユーザーを作成したくない場合は、ステップ5までスキップして既存のユーザースキーマを使用することもできます。

    • Visual Studio Codeの左側にあるアクティビティ・バーの「データベース」アイコンをクリックして、Oracle Database Explorerを開きます。
    • プラス記号(+)をクリックして、接続ダイアログを開きます。
    • 接続ダイアログに必要事項を入力します。
      • 接続タイプ: ベーシック
      • データベース・ホスト名: データベースが存在するホスト名(localhostなど)を入力します。
      • ポート番号: XE Databaseでは、デフォルトでポート1521が使用されます
      • サービス名: サービス名を入力します(XEを使用している場合はXEPDB1など)
      • ロール: 「SYSDBA」(管理者)を選択します。
      • ユーザー名: SYSと入力します
      • パスワード: SYSのパスワードを入力します。
      • パスワードの保存: 必要に応じてこのボックスにチェックを入れます。
    • Create Connection」ボタンをクリックします。
    • Oracle Explorerで、接続ノードをクリックして展開します(SYSと表示)DBName)。
    • 接続ノードを右クリックし、メニューから「Open New SQL File」を選択します。
    • 次のSQL文をコピーしてSQLファイルに貼り付けます(次の例のコード・ボックスの右下隅にあるコピー・ボタンをクリックして、内容をコピーして貼り付けます)。
      CREATE USER DEMODOTNET IDENTIFIED BY PASSWORD
      
         DEFAULT TABLESPACE USERS QUOTA UNLIMITED ON USERS;
      
      GRANT CREATE SESSION, CREATE VIEW, CREATE SEQUENCE,
         CREATE PROCEDURE, CREATE TABLE, CREATE TRIGGER,
           CREATE TYPE, CREATE MATERIALIZED VIEW TO DEMODOTNET;
    • このSQLでは、「DEMODOTNET」という名前のユーザーが作成されます。このユーザー名は変更することができます。「PASSWORD」をお好みのパスワードに変更します。データベースがUSERS表領域を使用しない場合、SQL文SELECT TABLESPACE_NAME FROM DBA_TABLESPACES;を含めることで、使用可能な表領域のリストを表示できます。準備ができたら、エディタで右クリックして「Execute All」を選択します。
    • 結果を表示して、エラーがないことを確認します。
  • 5. Oracle Databaseへの接続

    • Visual Studio Codeの左側にあるアクティビティ・バーの「データベース」アイコンをクリックして、Oracle Database Explorerを開きます。
    • プラス記号(+)をクリックして、接続ダイアログを開きます。
    • 接続ダイアログに必要事項を入力します。
      • 接続タイプ: ベーシック
      • データベース・ホスト名: データベースが存在するホスト名(localhostなど)を入力します。
      • ポート番号: XE Databaseでは、デフォルトでポート1521が使用されます
      • サービス名: サービス名を入力します(XEを使用している場合はXEPDB1など)
      • ロール: 「Default」(管理者以外)を選択します
      • ユーザー名: ユーザー名を入力します(例: DEMODOTNET)
      • パスワード: パスワードを入力します
      • パスワードの保存: 必要に応じてこのボックスにチェックを入れます。
    • Create Connection」ボタンをクリックします。
  • 6.SQL文の実行

    • Oracle Explorerで、接続ノードをクリックして展開します(DEMODOTNETと表示)DBName)。
    • 接続ノードを右クリックし、メニューから「Open New SQL File」を選択します。
    • 次のSQL文をコピーしてSQLファイルに貼り付けます(次の例のコード・ボックスの右下隅にあるコピー・ボタンをクリックして、内容をコピーして貼り付けます)。
      CREATE TABLE TODOITEM (id NUMBER GENERATED ALWAYS AS IDENTITY,
      
        DESCRIPTION VARCHAR2(4000), CREATION_TS TIMESTAMP WITH TIME ZONE
          DEFAULT CURRENT_TIMESTAMP, DONE NUMBER(1, 0), PRIMARY KEY(id));
      
      INSERT INTO TODOITEM (DESCRIPTION, DONE) VALUES('Task 1', 0);
      INSERT INTO TODOITEM (DESCRIPTION, DONE) VALUES('Task 2', 0);
      INSERT INTO TODOITEM (DESCRIPTION, DONE) VALUES('Task 3', 1);
      INSERT INTO TODOITEM (DESCRIPTION, DONE) VALUES('Task 4', 0);
      INSERT INTO TODOITEM (DESCRIPTION, DONE) VALUES('Task 5', 1);
      COMMIT;
      
      SELECT DESCRIPTION, DONE FROM TODOITEM;
    • エディタで右クリックして「Execute All」を選択します。
    • 結果を表示し、エラーがないか確認します。
  • 7. .NETコア・アプリケーションの構築と実行

    • 「Visual Studio Code」メニューから、「View」->「Terminal」を選択して「Terminal」ウィンドウを開きます。端末のコマンド・プロンプトで、アプリケーションの新しいディレクトリを作成し、そのディレクトリに移動します。次のステップに従って、端末へのコマンドの入力を続行します。
    • dotnet実行可能ファイルを使用して、新しいプロジェクトを作成します。
      dotnet new console
    • ODP.NET Coreをプロジェクトに追加します。
      dotnet add package Oracle.ManagedDataAccess.Core
    • Visual Studio Codeメニューから、「File」->「Open Folder」を選択し、上で作成したディレクトリを選択します。
    • Visual Studio Code Explorerペインが開きます。Program.csをダブルクリックして、エディタで開きます。
    • Program.csファイルの内容を次のコードに置き換えます。
      using System;
      using System.Data;
      using Oracle.ManagedDataAccess.Client;
      
      namespace ODP.NET_Core_Get_Started
      {
          class GettingStarted
          {
              //Prerequisite: This app assumes the user has already been created with the
              // necessary privileges
              //Set the demo user id, such as DEMODOTNET and password
              public static string user = "<DEMODOTNET>";
              public static string pwd = "<PASSWORD>";
      
              //Set the net service name, Easy Connect, or connect descriptor of the pluggable DB, 
              // such as "localhost/XEPDB1" for 18c XE or higher
              public static string db = "<localhost/XEPDB1>";
      
              static void Main()
              {
                  string conStringUser = "User Id=" + user + ";Password=" + pwd + ";Data Source=" + db + ";";
      
                  using (OracleConnection con = new OracleConnection(conStringUser))
                  {
                      using (OracleCommand cmd = con.CreateCommand())
                      {
                          try
                          {
                              con.Open();
                              Console.WriteLine("Successfully connected to Oracle Database as " + user);
                              Console.WriteLine();
      
                              //Retrieve sample data
                              cmd.CommandText = "SELECT description, done FROM todoitem";
                              OracleDataReader reader = cmd.ExecuteReader();
                              while (reader.Read())
                              {
                                  if (reader.GetBoolean(1))
                                      Console.WriteLine(reader.GetString(0) + " is done.");
                                  else
                                      Console.WriteLine(reader.GetString(0) + " is NOT done.");
                              }
      
                            
                              reader.Dispose();
                          }
                          catch (Exception ex)
                          {
                              Console.WriteLine(ex.Message);
                          }
                      }
                  }
              }
          }
      }
    • Program.csを変更して、DB接続情報を含めます。
      • ユーザーID: DOTNETDEMOと入力します(別のユーザーを使用する場合は、それを入力します)。
      • パスワード: ユーザーのパスワードを入力します。
      • データ・ソース: プラガブル・データベースに接続するためのEasy Connect 接続文字列 (例「yourhost:yourport/yourdbservice」)、ネットサービス名、または接続記述子を入力します。Oracle Database XEがローカル・マシン上にある場合は、Easy Connect 接続文字列「localhost/XEPDB1」をデータソースとして使用します。
    • Visual Studioの「Code」メニューから「File-Save」を選択して、変更をProgram.csに保存します。
    • ターミナルから、アプリケーションを実行します。
      dotnet run
    • データベースに接続し、5つの行が挿入され、各タスクの完了ステータスを含むタスクリストが端末に返されたというメッセージが表示されるはずです。おめでとうございます。Oracle Databaseへの問合せが正常に完了しました。

    Visual Studioを使用した.NET Core

    すべて開く すべて閉じる

    このチュートリアルでは、Oracle Data Provider for .NET(ODP.NET) Core、Visual Studio 2019、およびOracle Developer Tools for Visual Studio拡張機能を使用して、.NET CoreアプリケーションをOracle Database(オンプレミス)に接続する方法を紹介します。以下の手順に従ってください。

    (注: Visual Studioを使用した.NET Frameworkのチュートリアルをすでに完了している場合は、このチュートリアルの最後のステップまでスキップできます。その他のステップは同じです。)

  • 1.Oracle Databaseのインストール

    Oracle Databaseにまだアクセスできない場合は、以下のリンクをクリックしてOracle Database Express Edition(XE)をインストールします。(代わりにAlways Free Oracle Autonomous Databaseを使用する場合は、Developing .NET Applications for Oracle Autonomous Databaseチュートリアルを参照してください。)

    • 以下の手順に従って、Oracle Database XEをダウンロードしてインストールします。
    その他のリソース:
  • 2. Oracle Developer Tools For Visual Studioのインストール

    • インストールがまだの場合、Visual Studio 2019をインストールします
    • Oracle Developer Tools for Visual Studio 19.3.2をダウンロードします。
    • ダウンロードしたzipファイルを開き、ODTforVS2019_193200.vsixファイルを一時的な場所に解凍します。vsixファイルをダブルクリックしてインストーラを実行します。
    • インストールが完了したら、Visual Studio 2019を起動します。
    • Oracle Developer Tools for Visual Studioで追加の設定を行う必要があるというダイアログが表示される場合があります。その場合は、Visual Studioを終了し、ダイアログの指示に従います。ダイアログが終了したら、Visual Studio 2019を再度起動します。
  • 3. データベース・ユーザーの作成(オプション)

    このウォークスルーで作成するアプリケーションで、新しいデータベース・ユーザーを使用することをお薦めします。新しいユーザーのスキーマに「To Do」表を格納します。ユーザーの作成と権限の割り当てに慣れていない場合は、以下の手順に従って、Visual Studioを使用してデータベース管理者としてログインし、新しいデータベース・ユーザーを作成するために必要なSQLを実行してください。

    また、新しいユーザーを作成したくない場合は、次のステップ(ステップ4: Oracle Databaseへの接続)まで進んで、既存のユーザースキーマを使用することもできます。

    • サーバー・エクスプローラで「Data Connections」ノードを右クリックし、メニューから「Add Connection」を選択します。(Visual Studioでサーバー・エクスプローラが表示されない場合は、Visual Studioメニューから「表示」→「サーバー・エクスプローラ」を選択します。
    • 「データソース」フィールドがOracle Database (ODP.NET、管理対象ドライバ)に設定されていない場合は、「変更」ボタンをクリックします。それ以外の場合は、次の箇条書きをスキップします。
    • 「データソースの変更」ダイアログの「データソース: 」ボックスで「Oracle Database」を選択し、「データプロバイダー」ドロップダウンでODP.NET、「管理対象ドライバー」を選択します。(これらのオプションが使用できない場合は、Oracle Developer Tools for Visual Studioが正しくインストールされません)。
    • 「接続の追加」が表示されます。接続ダイアログに必要事項を入力します。
      • 接続タイプ: ベーシック
      • データベース・ホスト名: データベースが存在するホスト名(localhostなど)を入力します。
      • ポート番号: XE Databaseでは、デフォルトでポート1521が使用されます
      • サービス名: サービス名を入力します(XEを使用している場合はXEPDB1など)
      • ロール: 「SYSDBA」(管理者)を選択します。
      • ユーザー名: SYSと入力します
      • パスワード: SYSのパスワードを入力します。
      • パスワードの保存: 必要に応じてこのボックスにチェックを入れます。
    • 「OK」ボタンをクリックします。
    • Server Explorerで、接続ノードをクリックして展開します(SYSと表示)DBName)。次に、ノードを右クリックし、メニューから「問合せウィンドウ」を選択します。
    • 次のSQL文をコピーして Query Windowに貼り付けます(次の例のコード・ボックスの右下隅にあるコピー・ボタンをクリックして、内容をコピーして貼り付けます)。
      CREATE USER DEMODOTNET IDENTIFIED BY PASSWORD
      
         DEFAULT TABLESPACE USERS QUOTA UNLIMITED ON USERS;
      
      GRANT CREATE SESSION, CREATE VIEW, CREATE SEQUENCE,
         CREATE PROCEDURE, CREATE TABLE, CREATE TRIGGER,
           CREATE TYPE, CREATE MATERIALIZED VIEW TO DEMODOTNET;
    • このSQLでは、「DEMODOTNET」という名前のユーザーが作成されます。このユーザー名は変更することができます。「PASSWORD」をお好みのパスワードに変更します。データベースがUSERS表領域を使用しない場合、SQL文SELECT TABLESPACE_NAME FROM DBA_TABLESPACES;を含めることで、使用可能な表領域のリストを表示できます。準備ができたら、両方のSQL文を選択し、エディタで右クリックして「問合せの実行」を選択します。
    • 結果を表示して、エラーがなく、両方のSQL文が実行されたことを確認します。
  • 4. Oracle Databaseへの接続

    • サーバー・エクスプローラで「Data Connections」ノードを右クリックし、メニューから「Add Connection」を選択します。(Visual Studioでサーバー・エクスプローラが表示されない場合は、Visual Studioメニューから「表示」→「サーバー・エクスプローラ」を選択します。
    • 「接続の追加」ダイアログで、「データソース」フィールドがOracle Database(ODP.NET、管理対象ドライバー)にまだ設定されていない場合は、「変更」ボタンをクリックします。それ以外の場合は、次の箇条書きをスキップします。
    • 「データソースの変更」ダイアログの「データソース: 」ボックスで「Oracle Database」を選択し、「データプロバイダー」ドロップダウンでODP.NET、「管理対象ドライバー」を選択します。(これらのオプションが使用できない場合は、Oracle Developer Tools for Visual Studioが正しくインストールされません)。
    • 「接続の追加」が表示されます。接続ダイアログに必要事項を入力します。
      • 接続タイプ: ベーシック
      • データベース・ホスト名: データベースが存在するホスト名(localhostなど)を入力します。
      • ポート番号: XE Databaseでは、デフォルトでポート1521が使用されます
      • サービス名: サービス名を入力します(XEを使用している場合はXEPDB1など)
      • ロール: 「管理者以外」を選択します。
      • ユーザー名: ユーザー名(DEMODOTNETなど)を入力します
      • パスワード: ユーザーのパスワードを入力します。
      • パスワードの保存: 必要に応じてこのボックスにチェックを入れます。
    • 「OK」ボタンをクリックします。
  • 5. SQL文の実行

    • Server Explorerで、接続ノードをクリックして展開します(DEMODOTNETと表示されますDBName)。次に、ノードを右クリックし、メニューから「問合せウィンドウ」を選択します。
    • 次のSQL文をコピーして Query Windowに貼り付けます(次の例のコード・ボックスの右下隅にあるコピー・ボタンをクリックして、内容をコピーして貼り付けます)。
      CREATE TABLE TODOITEM (id NUMBER GENERATED ALWAYS AS IDENTITY,
      
        DESCRIPTION VARCHAR2(4000), CREATION_TS TIMESTAMP WITH TIME ZONE
          DEFAULT CURRENT_TIMESTAMP, DONE NUMBER(1, 0), PRIMARY KEY(id));
      
      INSERT INTO TODOITEM (DESCRIPTION, DONE) VALUES('Task 1', 0);
      INSERT INTO TODOITEM (DESCRIPTION, DONE) VALUES('Task 2', 0);
      INSERT INTO TODOITEM (DESCRIPTION, DONE) VALUES('Task 3', 1);
      INSERT INTO TODOITEM (DESCRIPTION, DONE) VALUES('Task 4', 0);
      INSERT INTO TODOITEM (DESCRIPTION, DONE) VALUES('Task 5', 1);
      COMMIT;
      
      SELECT DESCRIPTION, DONE FROM TODOITEM;
    • すべてのSQL文を選択し、エディタで右クリックして「問合せの実行」を選択します。
    • 結果を表示し、エラーがないかチェックして、すべてのSQL文が実行されたことを確認します。
  • 6. .NET Core (クロス・プラットフォーム)アプリケーションの構築と実行

      このステップでは、Windows、LinuxおよびmacOSで実行できる.NET Coreアプリケーションを構築します。

    • Visual Studioメニューから、「ファイル」→「新規」→「プロジェクト」を選択します。「新規プロジェクトの作成」ダイアログで、「テンプレートの検索」フィールドにconsoleと入力します。C#および.NET Core用にリストされた「コンソール・アプリケーション」プロジェクト・タイプを選択します。次に、「次へ」ボタンをクリックます。
    • 「新規プロジェクトの構成」ダイアログで、プロジェクト名にODP.NET_Core_Get_Startedと入力し、「次へ」ボタンをクリックします。
    • 「追加情報」ダイアログで.NET Core 3.1と入力し、「作成」ボタンをクリックします。
    • 新しいプロジェクトが開いたら、Solution Explorerを表示し、「依存関係」ノードを右クリックし、「NuGetパッケージの管理」を選択します(Solution Explorerが表示されない場合は、Visual Studioメニューに移動して、「表示」→「Solution Explorer」を選択します)。
    • Nuget Package Managerで、「参照」をクリックし、「検索」ボックスにoracleと入力します。
    • Oracle.ManagedDataAccess.Coreバージョン3.21.1を選択し、「インストール」ボタンをクリックします。「変更のプレビュー」ダイアログが開いたら、「OK」をクリックします。
    • Program.csファイルの内容を次のコードに置き換えます。
      using System;
      using System.Data;
      using Oracle.ManagedDataAccess.Client;
      
      namespace ODP.NET_Core_Get_Started
      {
          class GettingStarted
          {
              //Prerequisite: This app assumes the user has already been created with the
              // necessary privileges
              //Set the demo user id, such as DEMODOTNET and password
              public static string user = "<DEMODOTNET>";
              public static string pwd = "<PASSWORD>";
      
              //Set the net service name, Easy Connect, or connect descriptor of the pluggable DB, 
              // such as "localhost/XEPDB1" for 18c XE or higher
              public static string db = "<localhost/XEPDB1>";
      
              static void Main()
              {
                  string conStringUser = "User Id=" + user + ";Password=" + pwd + ";Data Source=" + db + ";";
      
                  using (OracleConnection con = new OracleConnection(conStringUser))
                  {
                      using (OracleCommand cmd = con.CreateCommand())
                      {
                          try
                          {
                              con.Open();
                              Console.WriteLine("Successfully connected to Oracle Database as " + user);
                              Console.WriteLine();
      
                              //Retrieve sample data
                              cmd.CommandText = "SELECT description, done FROM todoitem";
                              OracleDataReader reader = cmd.ExecuteReader();
                              while (reader.Read())
                              {
                                  if (reader.GetBoolean(1))
                                      Console.WriteLine(reader.GetString(0) + " is done.");
                                  else
                                      Console.WriteLine(reader.GetString(0) + " is NOT done.");
                              }
      
                            
                              reader.Dispose();
                          }
                          catch (Exception ex)
                          {
                              Console.WriteLine(ex.Message);
                          }
                      }
                  }
              }
          }
      }
    • Program.csを変更して、DB接続情報を含めます。
      • ユーザーID: DOTNETDEMOと入力します(別のユーザーを使用する場合は、それを入力します)。
      • パスワード: ユーザーのパスワードを入力します。
      • データ・ソース: プラガブル・データベースに接続するためのEasy Connect 接続文字列 (例「yourhost:yourport/yourdbservice」)、ネットサービス名、または接続記述子を入力します。Oracle Database XEがローカル・マシン上にある場合は、Easy Connect 接続文字列「localhost/XEPDB1」をデータソースとして使用します。
      • Visual Studioメニューから「デバッグ」→「デバッグの開始」を選択し(またはF5を押して)、アプリケーションを保存、構築および実行します。
      • Oracle Databaseに接続したというメッセージと、データベースから返された顧客情報が表示されます。おめでとうございます。Oracle Databaseへの問合せが正常に完了しました。

    Visual Studioを使用した.NET Framework

    すべて開く すべて閉じる

    このチュートリアルでは、Oracle Data Provider for .NET(ODP.NET)、Visual Studio 2019、およびOracle Developer Tools for Visual Studio拡張機能を使用して、.NET FrameworkアプリケーションをOracle Database(オンプレミス)に接続する方法を説明します。以下の手順に従ってください。

    (注: Visual Studioを使用した.NET Coreのチュートリアルをすでに完了している場合は、このチュートリアルの最後のステップまでスキップできます。その他のステップは同じです。)

  • 1.Oracle Databaseのインストール

    Oracle Databaseにまだアクセスできない場合は、以下のリンクをクリックしてOracle Database Express Edition(XE)をインストールします。(代わりにAlways Free Oracle Autonomous Databaseを使用する場合は、Developing .NET Applications for Oracle Autonomous Databaseチュートリアルを参照してください。)

    • 以下の手順に従って、Oracle Database XEをダウンロードしてインストールします。
    その他のリソース:
  • 2. Oracle Developer Tools For Visual Studioのインストール

    • インストールがまだの場合、Visual Studio 2019をインストールします
    • Oracle Developer Tools for Visual Studio 19.3.2をダウンロードします。
    • ダウンロードしたzipファイルを開き、ODTforVS2019_193200.vsixファイルを一時的な場所に解凍します。vsixファイルをダブルクリックしてインストーラを実行します。
    • インストールが完了したら、Visual Studio 2019を起動します。
    • Oracle Developer Tools for Visual Studioで追加の設定を行う必要があるというダイアログが表示される場合があります。その場合は、Visual Studioを終了し、ダイアログの指示に従います。ダイアログが終了したら、Visual Studio 2019を再度起動します。
  • 3. データベース・ユーザーの作成(オプション)

    このウォークスルーで作成するアプリケーションで、新しいデータベース・ユーザーを使用することをお薦めします。新しいユーザーのスキーマに「To Do」表を格納します。ユーザーの作成と権限の割り当てに慣れていない場合は、以下の手順に従って、Visual Studioを使用してデータベース管理者としてログインし、新しいデータベース・ユーザーを作成するために必要なSQLを実行してください。

    また、新しいユーザーを作成したくない場合は、次のステップ(ステップ4: Oracle Databaseへの接続)まで進んで、既存のユーザースキーマを使用することもできます。

    • サーバー・エクスプローラで「Data Connections」ノードを右クリックし、メニューから「Add Connection」を選択します。(Visual Studioでサーバー・エクスプローラが表示されない場合は、Visual Studioメニューから「表示」→「サーバー・エクスプローラ」を選択します。
    • 「データソース」フィールドがOracle Database (ODP.NET、管理対象ドライバ)に設定されていない場合は、「変更」ボタンをクリックします。それ以外の場合は、次の箇条書きをスキップします。
    • 「データソースの変更」ダイアログの「データソース: 」ボックスで「Oracle Database」を選択し、「データプロバイダー」ドロップダウンでODP.NET、「管理対象ドライバー」を選択します。(これらのオプションが使用できない場合は、Oracle Developer Tools for Visual Studioが正しくインストールされません)。
    • 「接続の追加」が表示されます。接続ダイアログに必要事項を入力します。
      • 接続タイプ: ベーシック
      • データベース・ホスト名: データベースが存在するホスト名(localhostなど)を入力します。
      • ポート番号: XE Databaseでは、デフォルトでポート1521が使用されます
      • サービス名: サービス名を入力します(XEを使用している場合はXEPDB1など)
      • ロール: 「SYSDBA」(管理者)を選択します。
      • ユーザー名: SYSと入力します
      • パスワード: SYSのパスワードを入力します。
      • パスワードの保存: 必要に応じてこのボックスにチェックを入れます。
    • 「OK」ボタンをクリックします。
    • Server Explorerで、接続ノードをクリックして展開します(SYSと表示)DBName)。次に、ノードを右クリックし、メニューから「問合せウィンドウ」を選択します。
    • 次のSQL文をコピーして Query Windowに貼り付けます(次の例のコード・ボックスの右下隅にあるコピー・ボタンをクリックして、内容をコピーして貼り付けます)。
      CREATE USER DEMODOTNET IDENTIFIED BY PASSWORD
      
         DEFAULT TABLESPACE USERS QUOTA UNLIMITED ON USERS;
      
      GRANT CREATE SESSION, CREATE VIEW, CREATE SEQUENCE,
         CREATE PROCEDURE, CREATE TABLE, CREATE TRIGGER,
           CREATE TYPE, CREATE MATERIALIZED VIEW TO DEMODOTNET;
    • このSQLでは、「DEMODOTNET」という名前のユーザーが作成されます。このユーザー名は変更することができます。「PASSWORD」をお好みのパスワードに変更します。データベースがUSERS表領域を使用しない場合、SQL文SELECT TABLESPACE_NAME FROM DBA_TABLESPACES;を含めることで、使用可能な表領域のリストを表示できます。準備ができたら、両方のSQL文を選択し、エディタで右クリックして「問合せの実行」を選択します。
    • 結果を表示して、エラーがなく、両方のSQL文が実行されたことを確認します。
  • 4. Oracle Databaseへの接続

    • サーバー・エクスプローラで「Data Connections」ノードを右クリックし、メニューから「Add Connection」を選択します。(Visual Studioでサーバー・エクスプローラが表示されない場合は、Visual Studioメニューから「表示」→「サーバー・エクスプローラ」を選択します。
    • 「接続の追加」ダイアログで、「データソース」フィールドがOracle Database(ODP.NET、管理対象ドライバー)にまだ設定されていない場合は、「変更」ボタンをクリックします。それ以外の場合は、次の箇条書きをスキップします。
    • 「データソースの変更」ダイアログの「データソース: 」ボックスで「Oracle Database」を選択し、「データプロバイダー」ドロップダウンでODP.NET、「管理対象ドライバー」を選択します。(これらのオプションが使用できない場合は、Oracle Developer Tools for Visual Studioが正しくインストールされません)。
    • 「接続の追加」が表示されます。接続ダイアログに必要事項を入力します。
      • 接続タイプ: ベーシック
      • データベース・ホスト名: データベースが存在するホスト名(localhostなど)を入力します。
      • ポート番号: XE Databaseでは、デフォルトでポート1521が使用されます
      • サービス名: サービス名を入力します(XEを使用している場合はXEPDB1など)
      • ロール: 「管理者以外」を選択します。
      • ユーザー名: ユーザー名(DEMODOTNETなど)を入力します
      • パスワード: ユーザーのパスワードを入力します。
      • パスワードの保存: 必要に応じてこのボックスにチェックを入れます。
    • 「OK」ボタンをクリックします。
  • 5. SQL文の実行

    • Server Explorerで、接続ノードをクリックして展開します(DEMODOTNETと表示されますDBName)。次に、ノードを右クリックし、メニューから「問合せウィンドウ」を選択します。
    • 次のSQL文をコピーして Query Windowに貼り付けます(次の例のコード・ボックスの右下隅にあるコピー・ボタンをクリックして、内容をコピーして貼り付けます)。
      CREATE TABLE TODOITEM (id NUMBER GENERATED ALWAYS AS IDENTITY,
      
        DESCRIPTION VARCHAR2(4000), CREATION_TS TIMESTAMP WITH TIME ZONE
          DEFAULT CURRENT_TIMESTAMP, DONE NUMBER(1, 0), PRIMARY KEY(id));
      
      INSERT INTO TODOITEM (DESCRIPTION, DONE) VALUES('Task 1', 0);
      INSERT INTO TODOITEM (DESCRIPTION, DONE) VALUES('Task 2', 0);
      INSERT INTO TODOITEM (DESCRIPTION, DONE) VALUES('Task 3', 1);
      INSERT INTO TODOITEM (DESCRIPTION, DONE) VALUES('Task 4', 0);
      INSERT INTO TODOITEM (DESCRIPTION, DONE) VALUES('Task 5', 1);
      COMMIT;
      
      SELECT DESCRIPTION, DONE FROM TODOITEM;
    • すべてのSQL文を選択し、エディタで右クリックして「問合せの実行」を選択します。
    • 結果を表示し、エラーがないかチェックして、すべてのSQL文が実行されたことを確認します。
  • 6. .NET Frameworkアプリケーションの構築と実行

      このステップでは、.NET Frameworkアプリケーションを構築します。

    • Visual Studioメニューから、「ファイル」→「新規」→「プロジェクト」を選択します。「新規プロジェクトの作成」ダイアログで、「テンプレートの検索」フィールドにconsoleと入力します。C#および.NET Framework用にリストされた「コンソール・アプリケーション」プロジェクト・タイプを選択します。次に、「次へ」ボタンをクリックます。
    • 「新規プロジェクトの構成」ダイアログで、プロジェクト名にODP.NET_Framework_Get_Startedと入力し、「次へ」ボタンを押します。
    • 「フレームワーク」ドロップダウンで、「.NET Framework 4.8」を選択します。(そのバージョンの .NETをお持ちでない場合は、別のバージョンを選択します)。次に、「Create」ボタンをクリックします。
    • 新しいプロジェクトが開いたら、ソリューション・エクスプローラを表示し、「参照」ノードを右クリックし、「NuGetパッケージの管理」を選択します(ソリューション・エクスプローラが表示されない場合は、Visual Studioメニューに移動して、「表示」→「ソリューション・エクスプローラ」を選択します)。
    • Nuget Package Managerで、「参照」をクリックし、「検索」ボックスにoracleと入力します。
    • Oracle.ManagedDataAccessバージョン19.11.0を選択し、「インストール」ボタンをクリックします。
    • Program.csファイルの内容を次のコードに置き換えます。
      using System;
      using System.Data;
      using Oracle.ManagedDataAccess.Client;
      
      namespace ODP.NET_Framework_Get_Started
      {
          class GettingStarted
          {
              //Prerequisite: This app assumes the user has already been created with the
              // necessary privileges
              //Set the demo user id, such as DEMODOTNET and password
              public static string user = "<DEMODOTNET>";
              public static string pwd = "<PASSWORD>";
      
              //Set the net service name, Easy Connect, or connect descriptor of the pluggable DB, 
              // such as "localhost/XEPDB1" for 18c XE or higher
              public static string db = "<localhost/XEPDB1>";
      
              static void Main()
              {
                  string conStringUser = "User Id=" + user + ";Password=" + pwd + ";Data Source=" + db + ";";
      
                  using (OracleConnection con = new OracleConnection(conStringUser))
                  {
                      using (OracleCommand cmd = con.CreateCommand())
                      {
                          try
                          {
                              con.Open();
                              Console.WriteLine("Successfully connected to Oracle Database as " + user);
                              Console.WriteLine();
      
                              //Retrieve sample data
                              cmd.CommandText = "SELECT description, done FROM todoitem";
                              OracleDataReader reader = cmd.ExecuteReader();
                              while (reader.Read())
                              {
                                  if (reader.GetBoolean(1))
                                      Console.WriteLine(reader.GetString(0) + " is done.");
                                  else
                                      Console.WriteLine(reader.GetString(0) + " is NOT done.");
                              }
      
                            
                              reader.Dispose();
                          }
                          catch (Exception ex)
                          {
                              Console.WriteLine(ex.Message);
                          }
                      }
                  }
              }
          }
      }
    • Program.csを変更して、DB接続情報を含めます。
      • ユーザーID: DOTNETDEMOと入力します(別のユーザーを使用する場合は、それを入力します)。
      • パスワード: ユーザーのパスワードを入力します。
      • データ・ソース: プラガブル・データベースに接続するためのEasy Connect 接続文字列 (例「yourhost:yourport/yourdbservice」)、ネットサービス名、または接続記述子を入力します。Oracle Database XEがローカル・マシン上にある場合は、Easy Connect 接続文字列「localhost/XEPDB1」をデータソースとして使用します。
      • Visual Studioメニューから、「デバッグ」→「デバッグなしで起動」(または[Ctrl]を押しながらF5)を選択して、アプリケーションを保存、構築および実行します。
      • Oracle Databaseに接続したというメッセージと、データベースから返された顧客情報が表示されます。おめでとうございます。Oracle Databaseへの問合せが正常に完了しました。