如何在 Visual Basic 中使用 ADO OpenSchema 方法

概要

本文介紹如何使用 ActiveX 數據對象 (ADO) Connection 對象的 OpenSchema 方法獲取有關數據庫或表的詳細信息。 OpenSche...

本文介紹如何使用 ActiveX 數據對象 (ADO) Connection 對象的 OpenSchema 方法獲取有關數據庫或表的詳細信息。

OpenSchema 的語法是下面:
設置記錄集 = connection.OpenSchema (QueryType,SchemaID 的條件)

更多信息

下面是三個參數 OpenSchema 方法: 指定的所需的架構類型的枚舉的值。 示例包括 adSchemaTables、 adSchemaPrimaryKeys...

下面是三個參數 OpenSchema 方法:
  • 指定的所需的架構類型的枚舉的值。 示例包括 adSchemaTables、 adSchemaPrimaryKeys、 adSchemaColumns。
  • 一個 Variant 數組。 元素和此陣列中的內容的數量取決於要運行架構查詢的類型。 可以使用此參數來限制在結果集中返回的行數。 但是,您不能限制您返回使用 OpenSchema 的列數。 條件陣列成員表示該字符串值來限制查詢結果。 陣列成員數在 querytype 而異。
  • 第三個參數因您使用提供程序而異。 它只有當時才需要將第一個參數設置爲 adSchemaProviderSpecific ; 否則,它不使用。
以下爲 OpenSchema 是示例參數。 請注意條件更改與該 querytype。 最重要記住的是提供值的順序必須爲相同。 其他 querytypes 相應條件的列表是聯機文檔位於以下 URL:
http://msdn2.microsoft.com/en-us/library/ms805098.aspx (http://msdn2.microsoft.com/en-us/library/ms805098.aspx)
   QueryType        Criteria
   =============================

   adSchemaTables   TABLE_CATALOG
                    TABLE_SCHEMA
                    TABLE_NAME
                    TABLE_TYPE
				
使用 adSchemaTables 列出數據庫中的表。

Microsoft Access 97 和 Access 2000

若要列出所有表和 Microsoft Access NWind 數據庫中的查詢,只是使用以下代碼:
Set rs = cn.OpenSchema(adSchemaTables)
   While Not rs.EOF
      Debug.Print rs!TABLE_NAME
      rs.MoveNext
   Wend
				
要列出只能訪問 Nwind 數據庫中表,使用:
Set rs = cn.OpenSchema(adSchemaTables, _
         Array(Empty, Empty, Empty, "Table")
				
使用相同語法與 Jet ODBC 驅動程序使用用於 ODBC 的 OLE DB 提供程序以及使用 Jet OLE DB 提供程序。

Microsoft SQL Server 6.5 和 7.0

要列出的所有表和 Microsoft SQL Server Pubs 數據庫中的視圖,使用:
Set rs = cn.OpenSchema(adSchemaTables)
				
要列出只是在 Microsoft SQL Server Pubs 數據庫中的在表,使用:
Set rs = cn.OpenSchema(adSchemaTables, _
         Array("Pubs", Empty, Empty, "Table")
				
使用相同的語法與 SQL Server ODBC 驅動程序使用 ODBC 的 OLE DB 提供程序,並使用 OLE DB Provider for SQL Server。
   QueryType         Criteria
   ===============================

   adSchemaColumns   TABLE_CATALOG
                     TABLE_SCHEMA
                     TABLE_NAME
                     COLUMN_NAME
				
使用 adSchemaColumns 列出表中的字段。

Microsoft Access 97 和 Access 2000

到與 adSchemaColumns,只使用數據庫的 Access Nwind 中 Employees 表中的該字段的列表:
Set rs = cn.OpenSchema(adSchemaColumns,Array(Empty, Empty, "Employees")

While Not rs.EOF
   Debug.Print rs!COLUMN_NAME
   rs.MoveNext
Wend
				
此適用使用 OLE DB Provider for ODBC 與 Jet ODBC 驅動程序和使用 Jet OLE DB 提供程序。

Microsoft SQL Server 6.5 和 7.0

到與 adSchemaColumns,只使用數據庫的 SQL Server Pubs 中 Authors (作者) 表中的該字段的列表:
Set rs = cn.OpenSchema(adSchemaColumns, Array("pubs", "dbo", "Authors")
				
的 TABLE _ CATALOG 數據庫並且 TABLE _ SCHEMA 表所有者的註釋。 這是使用 OLE DB Provider for ODBC 使用 SQL Server ODBC 驅動程序和使用 OLE DB Provider for SQL Server。
   QueryType          Criteria
   ================================

   adSchemaIndexes    TABLE_CATALOG
                      TABLE_SCHEMA
                      INDEX_NAME
                      TYPE
                      TABLE_NAME
				
您提供的 adSchemaIndexes querytype 索引名稱。

Microsoft Access 97 和 Access 2000

到與 adSchemaIndexes,只使用數據庫的 Access Nwind 中 Employees 表中的索引的列表:
Set rs = cn.OpenSchema(adSchemaIndexes, _
         Array(Empty, Empty, Empty, Empty, "Employees")

While Not rs.EOF
   Debug.Print rs!INDEX_NAME
   rs.MoveNext
Wend
				
此適用使用 OLE DB Provider for ODBC 與 Jet ODBC 驅動程序和使用 Jet OLE DB 提供程序。

Microsoft SQL Server 6.5 和 7.0

到 SQL Server Pubs 中的 Authors 表中的索引數據庫與 adSchemaIndexes,只需使用的列表:
Set rs = cn.OpenSchema(adSchemaIndexes, _
         Array("Pubs", "dbo", Empty, Empty, "Authors")
				
這有效使用 OLE DB Provider for ODBC 使用 SQL Server ODBC 驅動程序和使用 OLE DB Provider for SQL Server。 以下步驟演示 OpenSchema 方法。

OpenSchema 方法示例

在 Visual Basic (VB) 中選擇一個標準 EXE 項目。 將三個命令按鈕添加到 EXE 項目。 在 項目 菜單上選擇 引用 。 在引用對話框中選擇 Microsoft ActiveX 對象 Library 。 此示例使用 Pubs 數據庫附帶 SQL Server。 您需要將數據源名稱 (DSN) 更改爲您的計算機上的 DSN。 將以下代碼粘貼到項目的通用聲明部分:

請注意 您要更改 UID = <username> 和 PWD = < 強密碼 > 正確的值在運行此代碼之前。 請確保 UID 具有適當的權限在數據庫上執行此操作。
   'Open the proper connection.
   Dim cn As New ADODB.Connection
   Dim rs As New ADODB.Recordset

   Private Sub Command1_Click()
   'Getting the information about the columns in a particular table.
      Set rs = cn.OpenSchema(adSchemaColumns, Array("pubs", "dbo", _
             "authors"))
      While Not rs.EOF
          Debug.Print rs!COLUMN_NAME
          rs.MoveNext
      Wend

   End Sub

   Private Sub Command2_Click()
   'Getting the information about the primary key for a table.
      Set rs = cn.OpenSchema(adSchemaPrimaryKeys, Array("pubs", "dbo", _
             "authors"))
      MsgBox rs!COLUMN_NAME
   End Sub

   Private Sub Command3_Click()
   'Getting the information about all the tables.
      Dim criteria(3) As Variant
      criteria(0) = "pubs"
      criteria(1) = Empty
      criteria(2) = Empty
      criteria(3) = "table"
      Set rs = cn.OpenSchema(adSchemaTables, criteria)
      While Not rs.EOF
         Debug.Print rs!TABLE_NAME

         rs.MoveNext
      Wend

   End Sub

   Private Sub Form_Load()
      cn.Open "dsn=pubs;uid=<username>;pwd=<strong password>;"
      'To test with the Native Provider for SQL Server, comment the
      ' line above then uncomment the following line. Modify to use
      ' your server.
      'cn.Open "Provider=SQLOLEDB;Data Source=<servername>;" & _
      '        "User ID=sa;password=;"

   End Sub
				
Run. 單擊要測試每個命令按鈕。 End.modify 窗體加載事件過程來對 SQL Server 使用本機提供程序。 再次測試。 ADO 文檔有 querytype 和條件的更多信息。 OLE DB 中指定的架構信息基於提供程序支持一個目錄和架構的概念的假設。

參考

有關 OpenSchema 的詳細信息,請參閱以下 Microsoft 知識庫中的文章: 182831  (http://support.microsoft.c...

有關 OpenSchema 的詳細信息,請參閱以下 Microsoft 知識庫中的文章:
182831  (http://support.microsoft.com/kb/182831/EN-US/ ) 如何到 Visual C++ 中使用 ADO OpenSchema 方法
185979  (http://support.microsoft.com/kb/185979/EN-US/ ) 如何使用 ADO 檢索表索引信息
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章