GetSchema 和架构集合

每个 .NET Framework 托管提供程序中的 Connection 类都实施一个 GetSchema 方法,该方法用于检索有关当前连接的数据库的架构信息。 从 GetSchema 方法返回的架构信息采用 DataTable 形式。 GetSchema 方法属于重载方法,提供可选的参数来指定要返回的架构集合以及限制返回的信息量。

指定架构集合

GetSchema 方法的第一个可选参数是以字符串形式指定的集合名称。 有两种类型的架构集合:所有提供程序通用的通用架构集合以及每个提供程序特定的特定架构集合。

可以通过调用没有自变量或包含架构集合名称“MetaDataCollections”的 GetSchema 方法来查询由 .NET Framework 管理的提供程序,以确定支持的架构集合列表。 此时将返回 DataTable,包含支持的架构集合列表、每个架构集合支持的限制数以及所使用的标识符部分数。

检索架构集合示例

以下示例演示如何使用适用于 SQL Server 的 .NET Framework 数据提供程序 SqlConnection 类的 GetSchema 方法来检索与 AdventureWorks 示例数据库中包含的所有表有关的架构信息:

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 "..."
   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
using System;
using System.Data;
using System.Data.SqlClient;

class Program
{
  static void Main()
  {
  string connectionString = GetConnectionString();
  using (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 "...";
  }

  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("============================");
     }
  }
}

另请参阅