データ プロバイダーの使用
 
このページをシェアする                  
データ プロバイダーの使用
PSQL データ プロバイダーを使用すれば、.NET 対応アプリケーションやアプリケーション サーバーへのデータ アクセスが可能になります。データ プロバイダーはインターネットまたはイントラネット経由で、主要なデータ ストアへの高パフォーマンスなポイント ツー ポイント アクセスおよび n 層アクセスを提供します。データ プロバイダーは .NET 環境向けに最適化されているため、現在使用しているシステムに .NET 技術を組み込み、その機能を拡張してパフォーマンスを向上させることができます。
接続プール、ステートメント キャッシュ、セキュリティの設定、PSQL Bulk Load、および診断サポートなどの高度な機能については、高度な機能を参照してください。
標準 ADO.NET 環境における ADO.NET データ プロバイダーの使用法については、ADO.NET データ プロバイダーを参照してください。
ADO.NET Entity Framework でのデータ プロバイダーの使用法については、ADO.NET Entity Framework データ プロバイダーを参照してください。
データ プロバイダーについて
PSQL データ プロバイダーは、Microsoft .NET Framework 2.0、3.0、3.5、3.5 SP1、4.5、4.5.1、および 4.5.2 に準拠しています。データ プロバイダーは 100% マネージ コードで構築されています。つまり、完全に共通言語ランタイム(CLR)の内部で、実行およびデータベースへの接続が行えます。
クライアント ライブラリや COM コンポーネントなどネイティブ オペレーティング システムで実行するコードはアンマネージ コードと言います。マネージ コードとアンマネージ コードは 1 つのアプリケーション内に混在させることができます。ただし、アンマネージ コードは共通言語ランタイムの外部にまで影響が及ぶため、現実的には複雑になり、パフォーマンスも低下します。また、セキュリティの危険にさらすことにもなりかねません。
接続文字列の使用
接続の動作は、接続文字列や PsqlConnection オブジェクトのプロパティを使って定義することができます。
しかし、接続文字列内の値の設定を接続プロパティによって変更することはできません。
接続文字列の基本形式は、セミコロンで区切られた一連の「キーワード/値」のペアを含んでいます。次に、PSQL データ プロバイダー用の単純な接続文字列のキーワードと値の例を示します。
"Server DSN=SERVERDEMO;Host=localhost"
ガイドライン
接続文字列を指定する際には、次のガイドラインを用います。
接続文字列オプション名内のスペースは必須です。
接続文字列オプションでは大文字と小文字が区別されません。たとえば、Password と password は同じです。ただし、User ID や Password などのオプションの値には大小文字が区別されるものもあります。
セミコロン、一重引用符、または二重引用符の入った値を含めるには、その値を二重引用符で囲みます。値にセミコロンと二重引用符の両方が入っている場合は、一重引用符を使って値を囲みます。
値が二重引用符で始まる場合も一重引用符を使用できます。逆に、値が一重引用符で始まる場合は二重引用符を使用します。値に一重引用符と二重引用符のどちらも入っている場合は、値を囲むのに使用する文字が値の中に現れるたびに、その文字を 2 つ重ねる必要があります。
先頭または末尾のスペースを文字列値に含めるには、その値を一重引用符または二重引用符で囲む必要があります。整数値や、ブール値、列挙値を一重引用符または二重引用符で囲んでも、値の前後のスペースは無視されます。ただし、文字列リテラルのキーワード内あるいは値内のスペースは維持されます。接続文字列内で一重引用符または二重引用符を使用する場合、それが値内の先頭または末尾の文字でなければ、区切り文字なしで使用できます(たとえば、Data Source= my'Server または Data Source= my"Server)。
接続文字列オプションの値で特殊文字を使用することができます。特殊文字をエスケープするには、その値を一重引用符または二重引用符で囲みます。
また、等号文字(=)の繰り返しを接続文字列で使用することもできます。たとえば、次のような例です。
Initialization String=update mytable set col1 == 'foo'"
接続文字列に無効な接続文字列オプションが含まれている場合には、接続はエラーを返そうとします。たとえば、Alternate Servers を定義していないのに Load Balancing の値を指定すると、エラーが返されます。
接続文字列に接続文字列オプションが重複して含まれている場合には、データ プロバイダーは接続文字列内で最後に現れる接続文字列オプションを使用します。たとえば、次に示す接続文字列では、Connection Timeout が異なる値で 2 回現れます。データ プロバイダーは 2 番目の値を使用するので、試行した接続を終了するまでに 35 秒待ちます。
"Server DSN=SERVERDEMO;Host=localhost;Connection Timeout=15;Min Pool Size=50;Connection Timeout=35"
サポートされる接続文字列オプションの一覧については、表 29 を参照してください。
PSQL Performance Tuning Wizard の使用
Performance Wizard を使用して、ADO.NET データ プロバイダーと ADO.NET Entity Framework データ プロバイダーに最適な接続文字列オプションを選択することができます。
詳細については、PSQL Performance Tuning Wizard の使用を参照してください。
ストアド プロシージャ
アプリケーションでストアド プロシージャを使用できるようにするには、次の手順に従ってください。
PsqlCommand オブジェクトの CommandText プロパティにストアド プロシージャ名を設定します。
MyCommand.CommandText = "GetEmpSalary";
PsqlCommand オブジェクトの CommandType プロパティに StoredProcedure を設定します。
MyCommand.CommandType = CommandType.StoredProcedure;
必要に応じてパラメーター引数を指定します。アプリケーションでは PsqlCommand オブジェクトのパラメーター コレクションに、ストアド プロシージャの引数の順序どおりにパラメーターを追加してください。ただし、アプリケーションでは PsqlCommand オブジェクトの CommandText プロパティでパラメーター マーカーを指定する必要はありません。
ストアド プロシージャから戻り値を取得するには、アプリケーションで PsqlCommand オブジェクトのパラメーター コレクションにパラメーターを余分に追加する必要があります。このパラメーターの ParameterDirection プロパティを ParameterDirection.ReturnValue に設定します。戻り値の取得用のパラメーターは、パラメーター コレクションのどこにあってもかまいません。これは、このパラメーターが、PsqlCommand オブジェクトの Text プロパティにある特定のパラメーター マーカーに対応していないためです。
ストアド プロシージャからの戻り値がない場合は、ParameterDirection プロパティに ReturnValue としてバインドされているパラメーターは無視されます。
ストアド プロシージャがデータベースから ReturnValue を返しても、アプリケーションでそのパラメーターをバインドしていない場合は、データ プロバイダーによってその値が破棄されます。
ADO.NET Entity Framework ユーザーへの注記:PsqlConnection オブジェクトには、拡張された統計情報機能を提供するためのプロパティおよびメソッドが含まれています。これらのメソッドおよびプロパティは、ADO.NET データ プロバイダーでは標準ですが、ADO.NET Entity Framework レイヤーでは利用できません。代わりに、ADO.NET Entity Framework データ プロバイダーは、「疑似」ストアド プロシージャを介して同様の機能を公開します。詳細については、ADO.NET Entity Framework でのストアド プロシージャの使用を参照してください。
IP アドレスの使用
データ プロバイダーは、IPv4 形式および IPv6 形式のインターネット プロトコル(IP)アドレスをサポートします。お使いのネットワークが名前付きサーバーをサポートしている場合は、データ ソースに指定されたサーバー名を IPv4 アドレスまたは IPv6 アドレスに解決することができます。
EnableIPV6 接続文字列オプションを True に設定すると、IPv6 プロトコルがインストールされたクライアントを、IPv4 アドレスまたは IPv6 アドレスのいずれかを使用するサーバーに接続できるようになります。IPv6 形式の詳細については、『Getting Started With PSQL』の IPv6 を参照してください。
トランザクションのサポート
データ プロバイダーは、.NET Framework 内で完全に実装されるトランザクションのサポートには、100% マネージ コードのみを使用します。
ローカル トランザクションの使用
ローカル トランザクションは、基盤となるデータベースの内部的なトランザクション マネージャーを使用します。
アプリケーションでは、PsqlConnection オブジェクトで BeginTransaction を呼び出すことによって PsqlTransaction オブジェクトを作成します。トランザクションのコミットや中止などその後の操作は PsqlTransaction オブジェクトで実行されます。
スレッドのサポート
PsqlConnection オブジェクトはスレッドセーフです。それぞれ別のスレッドでアクセスする複数の PsqlCommand オブジェクトが、同時に 1 つの接続を使用できます。
別々のスレッドでほかのパブリック オブジェクトやデータ プロバイダー固有のオブジェクトに同時にアクセスするのはスレッド セーフではありません。
Unicode のサポート
データ プロバイダーは、.NET Framework SDK の規定に従って Unicode をサポートします。これは、データ プロバイダーでは Unicode UTF-16 エンコーディングで文字を表わすことを意味します。
データ プロバイダーは UTF-16 文字をデータベースで使用されている形式に変換し、.NET Framework 文字列をアプリケーションに返します。たとえば、PSQL データベース コード ページが拡張 ASCII 形式である場合、データ プロバイダーは拡張 ASCII を使用してデータベースに送られた文字を表します。その後、データ プロバイダーはアプリケーションに送り戻される前に、返された拡張 ASCII 文字を変換します。
Unicode と国際的な文字の .NET Framework 実装に関する詳細については、.NET Framework SDK のドキュメントを参照してください。
分離レベル
PSQL は ReadCommitted と Serializable の分離レベルをサポートします。PSQL はレコード レベルのロックをサポートします。詳細については、ロック レベルと分離レベルを参照してください。
SQL エスケープ シーケンス
PSQL データ プロバイダーでサポートする SQL エスケープ シーケンスの説明については、.NET の SQL エスケープ シーケンスを参照してください。
イベント処理
イベント ハンドラーは PsqlInfoMessageEventArgs 型の引数を受け取ります。これにはイベントに関するデータが含まれています。詳細については、PsqlInfoMessageEventArgs オブジェクトを参照してください。
このイベントは次のように定義されます。
public event PsqlInfoMessageEventHandler InfoMessage;
データベース サーバーから送られる警告や情報メッセージを処理したいクライアントは、このイベントを受け取るために PsqlInfoMessageEventHandler デリゲートを作成してください。
これらのイベントを使用して、パッケージ、ストアド プロシージャ、またはストアド関数(これらはすべてコマンドを作成します)の作成時に発生するエラーを取得することができます。パッケージ、ストアド プロシージャ、またはストアド関数で作成されたコマンドをコンパイルするときに PSQL でエラーが検出されると、有効ではありませんがオブジェクトが作成されます。イベントが送られ、エラー発生したことを示します。
次のコードでは、PsqlConnection オブジェクトの InfoMessage イベントを処理するメソッドを表わすデリゲートを定義しています。
[Serializable]
public delegate void PsqlInfoMessageEventHandler(
object sender
PsqlInfoMessageEventArgs e
);
ここで、sender はイベントを生成したオブジェクト、e は警告を説明する PsqlInfoMessageEventArgs オブジェクトです。イベントとデリゲートの詳細については、Microsoft .NET Framework SDK のドキュメントを参照してください。
エラー処理
PsqlError オブジェクトは、PSQL サーバーで生成されたエラーや警告に関する情報を収集します。詳細については、PsqlError オブジェクトを参照してください。
PsqlException オブジェクトは、PSQL サーバーがエラーを返したときに作成されスローされます。データ プロバイダーによって生成された例外は標準のランタイム例外として返されます。詳細については、PsqlException オブジェクトを参照してください。
.NET オブジェクトの使用
データ プロバイダーでは .NET パブリック オブジェクトをサポートし、それらをシールド オブジェクト(封印されたオブジェクト)として公開します。
詳細については、サポートされる .NET オブジェクトを参照してください。
.NET 用アプリケーションの開発
データ コンシューマー アプリケーションの開発者は、Microsoft .NET の仕様やオブジェクト指向のプログラミング技術に精通している必要があります。
Microsoft では以下のような ADO.NET に関する豊富な情報(主に英語)を Web 上で提供しています。
「Microsoft .NET へのアップグレード」 - 「ADO プログラマのための ADO.NET」
http://msdn.microsoft.com/ja-jp/library/aa302323.aspx
「.NET Framework データ プロバイダーによるデータのアクセス」
http://msdn.microsoft.com/ja-jp/library/aa735598(VS.71).aspx
「ADO.NET 2.0 基本クラスおよびファクトリによる汎用的なコーディング」
http://msdn.microsoft.com/ja-jp/library/dd278213.aspx
「セキュリティ ポリシーの実施」
http://msdn.microsoft.com/ja-jp/library/vstudio/sa4se9bc(v=vs.100).aspx
「サービス コンポーネントの作成」
http://msdn.microsoft.com/ja-jp/library/3x7357ez.aspx
「DataSet の作成および使用」
http://msdn.microsoft.com/ja-jp/library/aa719836(VS.71).aspx
「XML と DataSet」
http://msdn.microsoft.com/ja-jp/library/aa735754(VS.71).aspx