次の方法で共有


データベースからのスキーマ情報の取得

任意の .NET Framework データ プロバイダを使用して、データ ソースからスキーマ情報を取得できます。データ ソースのスキーマ情報には、そのデータ ソースから利用可能なデータベースまたはカタログ、データベース内のテーブルおよびビュー、そのデータ ソースのテーブルに対して存在する制約などが含まれます。

.NET Framework Data Provider for SQL Server と .NET Framework Data Provider for ODBC は、ストアド プロシージャや情報ビューなどの、特定のデータ ソースで提供されている機能を通じて、スキーマ情報を公開します。Microsoft SQL Server を通じて使用できるビューおよびストアド プロシージャについては、https://microsoft.com/japan/msdn/library/default.asp で「Transact-SQL リファレンス」を参照してください。

.NET Framework Data Provider for OLE DB は、OleDbConnection オブジェクトの GetOleDbSchemaTable メソッドを使用してスキーマ情報を公開します。GetOleDbSchemaTable は、どのスキーマ情報を返すかを識別する OleDbSchemaGuid と返された列に対する制約を保持するための配列を、引数として受け取ります。GetOleDbSchemaTable はスキーマ情報を格納している DataTable を返します。

データ ソースからスキーマ情報を取得するために、.NET Framework Data Provider for ODBC は、.NET Framework Data Provider for SQL Server と同じメソッドを使用します。

Northwind データベースのテーブル リストを返すサンプル コードを次に示します。.NET Framework Data Provider for SQL Server の例では、Microsoft SQL Server によって提供される情報ビューからテーブルを選択し、DataAdapter を使用して DataTable にスキーマ情報を設定します。.NET Framework Data Provider for OLE DB の例では、GetOleDbSchemaTable を使用して、スキーマ情報を保持している DataTable を返します。

SqlClient

Dim nwindConn As SqlConnection = New SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind")

Dim schemaDA As SqlDataAdapter = New SqlDataAdapter("SELECT * FROM INFORMATION_SCHEMA.TABLES " & _
                                                    "WHERE TABLE_TYPE = 'BASE TABLE' " & _
                                                    "ORDER BY TABLE_TYPE", _
                                                    nwindConn)

Dim schemaTable As DataTable = New DataTable
schemaDA.Fill(schemaTable)
[C#]
SqlConnection nwindConn = new SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind");

SqlDataAdapter schemaDA = new SqlDataAdapter("SELECT * FROM INFORMATION_SCHEMA.TABLES " +
                                             "WHERE TABLE_TYPE = 'BASE TABLE' " +
                                             "ORDER BY TABLE_TYPE", 
                                             nwindConn);

DataTable schemaTable = new DataTable();
schemaDA.Fill(schemaTable);

OleDb

Dim nwindConn As OleDbConnection = New OleDbConnection("Provider=SQLOLEDB;Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind")

nwindConn.Open()
Dim schemaTable As DataTable = nwindConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, _
                                                             New Object() {Nothing, Nothing, Nothing, "TABLE"})
nwindConn.Close()
[C#]
OleDbConnection nwindConn = new OleDbConnection("Provider=SQLOLEDB;Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind");

nwindConn.Open();
DataTable schemaTable = nwindConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,
                                                      new object[] {null, null, null, "TABLE"});
nwindConn.Close();

参照

.NET Framework データ プロバイダによるデータのアクセス | DataTable クラス | GetOleDbSchemaTable メソッド | OleDbSchemaGuid クラス