GetSchema およびスキーマ コレクション (ADO.NET)
更新 : November 2007
それぞれの .NET Framework マネージ プロバイダの Connection クラスは、GetSchema メソッドを実装します。このメソッドは、現在接続されているデータベースに関するスキーマ情報を取得するために使用されます。GetSchema メソッドから返されるスキーマ情報は、DataTable という形式になります。GetSchema メソッドは、返すスキーマ コレクションを指定し、返される情報の量を制限するためのオプション パラメータを提供する、オーバーロードされたメソッドです。
スキーマ コレクションの指定
GetSchema メソッドの最初のオプション パラメータは、文字列として指定されるコレクションの名前です。スキーマ コレクションには 2 種類あります。すべてのプロバイダに共通している一般的なスキーマ コレクションと、各プロバイダによって固有のスキーマ コレクションです。
.NET Framework マネージ プロバイダでは、引数を指定しないで、またはスキーマ コレクション名に "MetaDataCollections" を指定して GetSchema メソッドを呼び出すことにより、サポートされるスキーマ コレクションの一覧を決定します。これにより、サポートされるスキーマ コレクションの一覧、それぞれがサポートする制限数、および使用する識別子部分の数と共に、DataTable が返されます。
スキーマ コレクションの取得例
.NET Framework Data Provider for the SQL Server SqlConnection クラスの GetSchema メソッドを使って、AdventureWorks サンプル データベースに含まれるすべてのテーブルに関するスキーマ情報を取得する方法について、いくつかの例を次に示します。
[Visual Basic]
Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim connectionString As String = GetConnectionString()
Using connection As New SqlConnection(connectionString)
'Connect to the database then retrieve the schema information.
connection.Open()
Dim table As DataTable = connection.GetSchema("Tables")
' Display the contents of the table.
DisplayData(table)
Console.WriteLine("Press any key to continue.")
Console.ReadKey()
End Using
End Sub
Private Function GetConnectionString() As String
' To avoid storing the connection string in your code,
' you can retrieve it from a configuration file.
Return "Data Source=(local);Database=AdventureWorks;" _
& "Integrated Security=true;"
End Function
Private Sub DisplayData(ByVal table As DataTable)
For Each row As DataRow In table.Rows
For Each col As DataColumn In table.Columns
Console.WriteLine("{0} = {1}", col.ColumnName, row(col))
Next
Console.WriteLine("============================")
Next
End Sub
End Module
[C#]
using System;
using System.Data;
using System.Data.SqlClient;
class Program
{
static void Main()
{
string connectionString = GetConnectionString();
sing (SqlConnection connection = new SqlConnection(connectionString))
{
// Connect to the database then retrieve the schema information.
connection.Open();
DataTable table = connection.GetSchema("Tables");
// Display the contents of the table.
DisplayData(table);
Console.WriteLine("Press any key to continue.");
Console.ReadKey();
}
}
private static string GetConnectionString()
{
// To avoid storing the connection string in your code,
// you can retrieve it from a configuration file.
return "Data Source=(local);Database=AdventureWorks;" +
"Integrated Security=true;";
}
private static void DisplayData(System.Data.DataTable table)
{
foreach (System.Data.DataRow row in table.Rows)
{
foreach (System.Data.DataColumn col in table.Columns)
{
Console.WriteLine("{0} = {1}", col.ColumnName, row[col]);
}
Console.WriteLine("============================");
}
}
}