分享方式:


GetSchema 和結構描述集合

每個 .NET Framework 受控提供者的 Connection 類別都會實作 GetSchema 方法,以擷取與目前所連接資料庫相關的結構描述資訊。 從 GetSchema 方法傳回的結構描述資訊會採用 DataTable 的形式。 GetSchema 方法是一種多載方法,可提供選擇性參數,以指定要傳回的結構描述集合及限制傳回的資訊量。

指定結構描述集合

GetSchema 方法的第一個選擇性參數是指定為字串的集合名稱。 結構描述集合有兩種型別:通用於所有提供者的通用結構描述集合與每個提供者特有的特定結構描述集合。

您可以藉由呼叫 GetSchema 方法 (不使用引數或使用結構描述集合名稱 MetaDataCollections),來查詢 .NET Framework Managed 提供者,以決定支援的結構描述集合清單。 這會傳回 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("============================");
     }
  }
}

另請參閱