すべてのプロダクト
Search
ドキュメントセンター

PolarDB:.NET

最終更新日:May 27, 2024

このトピックでは、ADO.NET Data Provider for (PolarDB .NET) ドライバーを使用して、C# アプリケーションを データベースに接続する方法について説明します。

前提条件

背景情報

PolarDB。NETは、C# 、Visual Basic、F# などのプログラミング言語を使用して データベースに接続できるようにするドライバーです。 PolarDB。NETドライバーは、Entity Framework CoreおよびEntity Framework 6.xと互換性があります。 PolarDBを使用できます。NETをEntity Frameworkと組み合わせて、アプリケーションを迅速に開発できます。

PolarDB。NETドライバーは、PostgreSQLプロトコルのバージョン3.0を使用します。 ドライバーは互換性があります。. NET Framework 2.0, . . NET Framework 4.0, . . NET Framework 4.5、および. . NET Core 2.0

以前のバージョンのPolarDB。NETドライバーの場合、ほとんどのクラス名はPOLARDBで始まります。 ドライバの最新バージョンでは、クラス名はPolarDBで始まります。 したがって、コードでPOLARDBをPolarDBに置き換える必要があります。 ドライバーのロジックは変更されないため、ドライバーをアップグレードしてコードを更新してもサービスは影響を受けません。

Entity Framework 概要

Entity Frameworkは、で広く採用されているオブジェクトリレーショナルマッピング (ORM) フレームワークです。. NETプラットフォーム Entity Frameworkと統合言語クエリ (LINQ) テクノロジは、バックエンドC# アプリケーションを開発するための迅速な方法を提供します。

PolarDB。NETドライバーが提供します。Entity Framework 5 (EF5) およびEntity Framework 6 (EF6) のdllファイル、および dllファイルは、 に適用できます。 これは、Entity Frameworkの使用に役立ちます。

Entity Frameworkの詳細については、Entity Frameworkの公式Webサイトを参照してください。

PolarDBをインストールします。NETドライバー

  1. のパッケージをダウンロードします。PolarDB。NETドライバー。
  2. PolarDBのパッケージを解凍します。. NETドライバー
    polardb_oracle_.net.zip
    を解凍する
  3. ドライバーをVisual Studioプロジェクトにインポートします。
    1. Visual Studioのグラフィカルユーザーインターフェイス (GUI) の左側のナビゲーションウィンドウで、[プロジェクト] を右クリックし、参照を追加.
    2. では、参照マネージャーダイアログボックスで、参照左側のナビゲーションウィンドウで、ブラウズ...ボタンをクリックします。
      Visual Studio-1
    3. では、参照するファイルを選択するダイアログボックスでドライバを選択し、追加.
      Visual Studio-2
    4. クリックOK.

例:

Samplesディレクトリには、PolarDBSample.sqlファイルと複数のサンプルプロジェクトファイルが格納されます。 サンプルプロジェクトを実行する手順を次に示します。

  1. データベースに接続します。 詳細については、「PolarDB For PostgreSQL (Compatible with Oracle) クラスターへの接続」をご参照ください。
  2. という名前のデータベースを作成するには、次のステートメントを実行します。sampledb.
    CREATE DATABASE sampledb;
  3. テストに必要なテーブル、データ、および関数をsampledb
    \i ${your path}/PolarDBSample.sql
  4. データがインポートされたら、C# コードを書きます。

    次のサンプルコードは、サンプルプロジェクトのストアドプロシージャを照会、更新、および呼び出す方法を示しています。

    システムを使用して;
    System.Dataを使用する。PolarDB.PolarDBClientの使用
    /*
     * このクラスは、PolarDBでDML操作を実行する簡単な方法を提供します
     *
     * @revision 1.0
     * /
    
    名前空間PolarDBClientTest
    {
    
        class SAMPLE_TEST
        {
    
            static void Main(string[] args)
            {
                PolarDBConnection conn = new PolarDBConnection("Server=localhost;Port=5432;User Id=polaruser;Password=password;Database=sampledb");
                try
                {
                    conn.Open();
    
                    // PolarDBCommandオブジェクトを使用した単純な選択文
                    PolarDBCommand PolarDBSeletCommand = new PolarDBCommand("SELECT EMPNO,ENAME,JOB,MGR,HIREDATE FROM EMP",conn);
                    PolarDBDataReader SelectResult = PolarDBSeletCommand.ExecuteReader();
                    while (SelectResult.Read()) 
                    {
                        Console.WriteLine("Emp No" + " " + SelectResult.GetInt32(0));
                        Console.WriteLine("Emp Name" + " " + SelectResult.GetString(1));
                        if (SelectResult.IsDBNull(2) == false)
                            Console.WriteLine("Job" + " " + SelectResult.GetString(2));
                        else
                            Console.WriteLine("Job" + " null ");
                        if (SelectResult.IsDBNull(3) == false)
                            Console.WriteLine("Mgr" + " " + SelectResult.GetInt32(3));
                        else
                            Console.WriteLine("Mgr" + "null");
                        if (SelectResult.IsDBNull(4) == false)
                            Console.WriteLine("Hire Date" + " " + SelectResult.GetDateTime(4));
                        else
                            Console.WriteLine("Hire Date" + " null");
                        Console.WriteLine("---------------------------------");
                    }
    
                    // PolarDBCommandオブジェクトを使用した文の挿入
                    SelectResult.Close();
                    PolarDBCommand PolarDBInsertCommand = new PolarDBCommand("INSERT INTO EMP(EMPNO、ENAME) VALUES((SELECT COUNT(EMPNO) FROM EMP) 、'JACKSON')" 、conn);
                    PolarDBInsertCommand.ExecuteScalar();
                    Console.WriteLine("Record inserted");
    
                    // PolarDBCommandオブジェクトを使用した更新
                    PolarDBCommand PolarDBUpdateCommand=新しいPolarDBCommand("UPDATE EMP SET ENAME ='DOTNET' WHERE EMPNO < 100" 、conn);
                    PolarDBUpdateCommand.ExecuteNonQuery();
                    Console.WriteLine("Record has been updated");
                    PolarDBCommand PolarDBDeletCommand=新しいPolarDBCommand("EMP WHERE EMPNO < 100" 、connから削除);
                    PolarDBDeletCommand.CommandType= CommandType.Text;
                    PolarDBDeletCommand.ExecuteScalar();
                    Console.WriteLine("Record deleted");
    
                    //procedure call example
                    try
                    {
                        PolarDBCommand callable_command = new PolarDBCommand("emp_query(:p_deptno,:p_empno,:p_ename,:p_job,:p_hiredate,:p_sal)", conn);
                        callable_command.CommandType = CommandType.StoredProcedure;
                        callable_command.Parameters.Add(new PolarDBParameter("p_deptno",PolarDBTypes.PolarDBDbType.Numeric,10,"p_deptno",ParameterDirection.Input,false ,2,2,System.Data.DataRowVersion.Current,20));
                        callable_command.Parameters.Add(new PolarDBParameter("p_empno", PolarDBTypes.PolarDBDbType.Numeric,10,"p_empno",ParameterDirection.InputOutput,false ,2,2,System.Data.DataRowVersion.Current,7369));
                        callable_command.Parameters.Add(new PolarDBParameter("p_ename", PolarDBTypes.PolarDBDbType.Varchar,10,"p_ename",ParameterDirection.InputOutput,false ,2,2,System.Data.DataRowVersion.Current,"SMITH"));
                        callable_command.Parameters.Add(new PolarDBParameter("p_job", PolarDBTypes.PolarDBDbType.Varchar,10,"p_job",ParameterDirection.Output,false ,2,2,System.Data.DataRowVersion.Current,null));
                        callable_command.Parameters.Add(new PolarDBParameter("p_hiredate", PolarDBTypes.PolarDBDbType.Date,200,"p_hiredate",ParameterDirection.Output,false ,2,2,System.Data.DataRowVersion.Current,null));
                        callable_command.Parameters.Add(new PolarDBParameter("p_sal", PolarDBTypes.PolarDBDbType.Numeric,200,"p_sal",ParameterDirection.Output,false ,2,2,System.Data.DataRowVersion.Current,null));
                        callable_command.Prepare();
                        callable_command.Parameters[0].Value = 20;
                        callable_command.Parameters[1].Value = 7369;
                        PolarDBDataReader結果=callable_command.ExecuteReader();
                        int fc = result.FieldCount;
                        for(int i=0;i<fc;i++)
                            Console.WriteLine("RESULT["+i+"]="+ Convert.ToString(callable_command.Parameters[i].Value));
                        result.Close();
                    }
                    // ドライバのバージョンが NET 2.0の場合、次のステートメントを変更する必要があります。
                    catch(PolarDBException exp)
                    {
                        if(exp.ErrorCode.Equals("01403"))
                            Console.WriteLine("No data found");
                        else if(exp.ErrorCode.Equals("01422"))
                            Console.WriteLine("More than one rows were returned by the query");
                        else
                            Console.WriteLine("エラーが発生しました手順を呼び出す。 \n根本原因:\n ");
                        Console.WriteLine(exp.Message.ToString());
                    }
    
                    //Prepared statement
                    string updateQuery  = "update emp set ename = :Name where empno = :ID";
                    PolarDBCommand Prepared_command=新しいPolarDBCommand(updateQuery、conn);
                    Prepared_command.CommandType = CommandType.Text;
                    Prepared_command.Parameters.Add (新しいPolarDBParameter("ID", PolarDBTypes.PolarDBDbType.Integer));
                    Prepared_command.Parameters.Add (新しいPolarDBParameter("Name", PolarDBTypes.PolarDBDbType.Text));
                    Prepared_command.Prepare();
                    Prepared_command.Parameters[0].Value = 7369;
                    Prepared_command.Parameters[1].Value = "Mark";
                    Prepared_command.ExecuteNonQuery();
                    Console.WriteLine("Record Updated...");
                }
    
                catch(PolarDBException exp)
                {
                    Console.WriteLine(exp.ToString() );
                }
                finally
                {
                    conn.Close();
                }
    
            }
        }
    }

接続文字列パラメータ

アプリケーションは、データベースに接続するための接続文字列を提供する必要があります。 接続文字列には、ホスト、ユーザー名、およびパスワードのパラメーターが含まれます。

接続文字列はkeyword1=value; keyword2=value; 形式であり、大文字と小文字は区別されません。 二重引用符 (") を使用して、セミコロン (;) などの特殊文字を含む値を囲むことができます。

現在のドライバーは、次の接続文字列パラメーターをサポートしています。

表1. 基本接続に関連するパラメータ
パラメーター説明
ホストlocalhost クラスターのエンドポイント。 エンドポイントの表示方法の詳細については、「エンドポイントの表示または申請」をご参照ください。
ポート1521 クラスターのポート。 デフォルト値:1521
データベースsampledb接続するデータベースの名前です。
ユーザー名polaruser クラスターへの接続に使用されるユーザー名。
パスワードパスワード クラスターのユーザー名のパスワード。
表2. 接続プールに関連するパラメーター
パラメーター説明
プールtrue接続プールを有効にするかどうかを指定します。
最小プールサイズ0接続プールの最小サイズ。
最大プールサイズ100接続プールの最大サイズ。
接続アイドル寿命300タイムアウト期間。 タイムアウト期間が終了すると、すべての接続の数が [最小プールサイズ] パラメーターの値を超えると、プール内のアイドル接続が閉じられます。 (秒単位)。
接続の剪定間隔10アイドル接続を削除する間隔。 (秒単位)。
表3. その他のパラメータ
パラメーター説明
application_nameアプリケーションの名前。
search_pathスキーマの検索パス。The search path of the schema.
client_encodingクライアントのエンコーディング。
タイムゾーンセッションのタイムゾーン。