GetOleDbSchemaTable と Visual C# .NET を使用してスキーマ情報を取得する方法
この記事は、以前は次の ID で公開されていました: JP309681 目次概要
この資料では、ADO.NET にある OleDbConnection オブジェクトの GetOleDbSchemaTable メソッドを使用して、データベースのスキーマ情報を取得する方法について説明します。データ ソースのスキーマ情報には、そのデータ ソースで利用可能なデータベースやカタログ、データベース内のテーブルやビュー、制約などが含まれます。テーブルのスキーマ情報には、主キー、列、および "オートナンバ" フィールドが含まれます。
SqlClient.SqlConnection オブジェクトを使用する場合は、GetOleDbSchemaTable メソッドと等価なメソッドがないことに注意してください。SQL Server .NET データ プロバイダでは、ストアド プロシージャと情報用のビューを使用して、バックエンドのスキーマ情報を公開します。Microsoft SQL Server を介して使用できるビューやストアド プロシージャの詳細については、MSDN ライブラリの Transact-SQL リファレンスを参照してください。 必要条件必要なハードウェア、ソフトウェア、ネットワーク インフラストラクチャ、および Service Pack は次のとおりです。
OleDbConnection オブジェクトの GetOleDbSchemaTable メソッドOLE DB .NET データ プロバイダは、OleDbConnection オブジェクトの GetOleDbSchemaTable メソッドを使用して、スキーマ情報を公開します。GetOleDbSchemaTable からは、スキーマ情報が設定された DataTable が返されます。GetOleDbSchemaTable メソッドの最初の引数はスキーマのパラメータで、どのスキーマ情報 (テーブル、列、主キーなど) が返されるのかを指定する OleDbSchemaGuid 型の引数です。2 番目の引数は、スキーマの DataTable に返される行をフィルタするための制約の Object 型配列です (たとえば、テーブル名、型、所有者、およびスキーマの制約を指定できます)。 OleDbSchemaGuid のメンバOleDbSchemaGuid 引数は、GetOleDbSchemaTable メソッドに対してスキーマ テーブルの種類を指定するものです。OleDbSchemaGuid のメンバの一部を次に示します。
制約制約は、フィルタの値を設定した Object 配列で、各要素は返される DataTable の DataColumn に対応しています。OleDbSchemaGuid 引数によって、関連する制約が決まります。たとえば、テーブルの OleDbSchemaGuid を指定した場合、制約の配列は次のようになります。
{TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE}
利用可能な制約を調べるには、次のマイクロソフト Web サイトで、OleDbSchemaGuid のメンバをクリックしてください。
OleDbSchemaGuid メンバ
制約配列に値を渡す場合、値を含まない配列要素には Visual C# .NET の null キーワードを含めるようにしてください。たとえば、テーブル スキーマを取得する場合は OleDbSchemaGuid.Tables を使用します。ただし、テーブル (Tables) を指定すると、別名、シノニム、ビュー、およびその他の関係するオブジェクトも返されます。このため、テーブル以外のオブジェクトをすべて除外する場合は、TABLE_TYPE に TABLE の制約を指定します。TABLE_CATALOG、TABLE_SCHEMA、および TABLE_NAME に対応するオブジェクトにはフィルタリングを行わないため、これらには null を使用できます。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemdataoledboledbschemaguidmemberstopic.asp (http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemdataoledboledbschemaguidmemberstopic.asp)
返される DataTableGetOleDbSchemaTable メソッドが返す DataTable には、OleDbSchemaGuid の型と制約条件に一致した各オブジェクトに対応した行が含まれています。DataTable には制約列ごとに対応した一連の列があり、この後に OleDbSchemaGuid に基づく追加のスキーマ情報が続きます。たとえば、次のコードを使用すると、返される DataTable の各行はデータベース テーブルになります。
DataTable に返される列は、制約の列 (TABLE_CATALOG、TABLE_SCHEMA、TABLE_NAME、TABLE_TYPE) です。この後に、追加のスキーマ列として TABLE_GUID、DESCRIPTION、TABLE_PROPID、DATE_CREATED、および DATE_MODIFIED が続きます。
この列名の一覧 (つまり、TABLE_CATALOG、TABLE_SCHEMA、TABLE_NAME などのフィールド記述子) は、列の順序位置 (インデックス) を使用して取得できます。Columns 配列はインデックスがゼロから始まることに注意してください。
各列の値 (つまり、Categories、Customers、Employees など実際のテーブル名) を取得するには、行の ItemArray の順序位置 (インデックス) を使用します。ItemArray はインデックスがゼロから始まることに注意してください。
データベースのテーブルを一覧表示するサンプルを作成する次のサンプルは、SQL Server の Northwind データベースのテーブルを一覧表示するものです。OleDbSchemaGuid.Tables は、指定されたログオン ユーザーがアクセスできるテーブル (ビューを含む) を返します。Object 配列 {null, null, null, "TABLE"} を指定すると、TABLE_TYPE が TABLE であるデータのみが含まれるようにフィルタされます。その後、返されたスキーマ テーブルの各行のテーブル名 (TABLE_NAME) を一覧表示します。
テーブルのスキーマを取得するサンプルを作成する次のサンプルは、SQL Server の Northwind データベースにある Employees テーブルのスキーマ情報を一覧表示するものです。OleDbSchemaGuid.Tables は、指定されたログオン ユーザーがアクセスできるテーブル (ビューを含む) を返します。Object 配列 {null, null, "Employees", "TABLE"} を指定した場合、Employees という名前のテーブルのみが含まれるようにフィルタされます。その後、返されたスキーマ テーブルのスキーマ情報を一覧表示します。
データベースの列を一覧表示するサンプルを作成する次のサンプルは、SQL Server の Northwind データベースにある Employees テーブルの列の名前を一覧表示するものです。OleDbSchemaGuid.Columns は、指定されたログオン ユーザーがアクセスできるテーブルとビューの列を返します。Object 配列 {null, null, "Employees", null} を指定した場合、Employees テーブルの列のみが含まれるようにフィルタされます。
テーブルの主キーを一覧表示するサンプルを作成する次のサンプルは、SQL Server の Northwind データベースにある Employees テーブル、および SQL Server Pubs データベースの Employee テーブルの主キーを一覧表示するものです。OleDbSchemaGuid.Primary_Keys は、指定されたログオン ユーザーがアクセスできるカタログの主キーを返します。このサンプルでは、OleDbConnection は、特定の SQL Server データベースではなく、SQL Server に接続します。
OleDbConnection で指定する代わりに、このコードでは、制約配列の TABLE_CATALOG として Northwind または Pubs データベースを指定します。このコードは、TABLE_SCHEMA 制約に対して、テーブルの所有者 "dbo" を指定します。さらに、このコードは、TABLE_NAME 制約でテーブル名を指定します。
Northwind データベースの Employees テーブルの主キーを取得するには、Object 配列 {"Northwind", "dbo", "Employees"} を使用します。
Pubs データベースの Employee テーブルの主キーを取得するには、Object 配列 {"Pubs", "dbo", "Employee"} を使用します。
サンプルを作成するには、次の手順を実行します。
関連情報
OleDbSchemaGuid の全メンバの一覧については、Microsoft .NET Framework Software Development Kit (SDK) で次のトピックを参照してください。利用可能な制約の一覧については、OleDbSchemaGuid メンバのいずれかをクリックしてください。
OleDbSchemaGuid メンバ
詳細については、.NET Framework SDK ドキュメントで次のトピックを参照してください。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemdataoledboledbschemaguidmemberstopic.asp (http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemdataoledboledbschemaguidmemberstopic.asp)
データベースからのスキーマ情報の取得
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpconobtainingschemainformationfromdatabase.asp (http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpconobtainingschemainformationfromdatabase.asp) OleDbConnection.GetOleDbSchemaTable メソッド http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemdataoledboledbconnectionclassgetoledbschematabletopic.asp (http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemdataoledboledbconnectionclassgetoledbschematabletopic.asp) OleDbSchemaGuid.Tables フィールド http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemdataoledboledbschemaguidclasstablestopic.asp (http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemdataoledboledbschemaguidclasstablestopic.asp) OleDbSchemaGuid.Columns フィールド http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemdataoledboledbschemaguidclasscolumnstopic.asp (http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemdataoledboledbschemaguidclasscolumnstopic.asp) OleDbSchemaGuid.Primary_Keys フィールド http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemdataoledboledbschemaguidclassprimary_keystopic.asp (http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemdataoledboledbschemaguidclassprimary_keystopic.asp) この資料は以下の製品について記述したものです。
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。" | サポート技術情報の翻訳
|