none
請教如何取的資料庫中之使用者資料表的名稱 RRS feed

  • 問題

  •  

    以下為章立民先生ADO.NET線上教學程式碼片段

    ' 此查詢陳述式用來取得 SQL Server 中的使用者資料庫名稱
    mySelectQuery = "SELECT name FROM master.dbo.sysdatabases WHERE name NOT IN ('master','tempdb','msdb','model')"

    ' 建立 SqlCommand 物件
      Dim myCommand As New SqlCommand(mySelectQuery, con)

    ' 開啟連接
      con.Open()
        

    ‧‧‧

     

    ' 此查詢陳述式能夠取得作用資料庫中之使用者資料表的名稱
     mySelectQuery = "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' ORDER BY TABLE_TYPE"

     

    請教要取的access的資料表,該怎麼寫

    2007年7月17日 上午 08:05

解答

  • 看你的習慣,你可以使用 OleDbConnection.GetSchema 或 OdbcConnection.GetSchema

     

    基本上應該 GetSchema 用法先做一次

    DataTable = xxxConnection.GetSchema()

     

    此時會傳回第一層的結構,比如說索引、表格、檢視、預存程序,再從表格集合下找表格。

    DataTable = xxxConnection.GetSchema("Tables")

     

    自己過濾掉 SYSTEM TABLE ,剩下來的就是你要的。

     

    由於 Access 限制條件僅允許到第三欄,所以沒辦法以

    DataTable = xxxConnection.GetSchema("Tables", New String(){Nothing, Nothing, Nothing, "TABLE"})

    限制僅傳回一般表格。

     

    所以你可以在 DataTable 下做次查詢。

     

    由於 Access 第一層結構固定已知,你可以跳過第一層的結構巡視,直接做藍色那行。

    2007年7月17日 上午 10:06
    版主

所有回覆

  • 看你的習慣,你可以使用 OleDbConnection.GetSchema 或 OdbcConnection.GetSchema

     

    基本上應該 GetSchema 用法先做一次

    DataTable = xxxConnection.GetSchema()

     

    此時會傳回第一層的結構,比如說索引、表格、檢視、預存程序,再從表格集合下找表格。

    DataTable = xxxConnection.GetSchema("Tables")

     

    自己過濾掉 SYSTEM TABLE ,剩下來的就是你要的。

     

    由於 Access 限制條件僅允許到第三欄,所以沒辦法以

    DataTable = xxxConnection.GetSchema("Tables", New String(){Nothing, Nothing, Nothing, "TABLE"})

    限制僅傳回一般表格。

     

    所以你可以在 DataTable 下做次查詢。

     

    由於 Access 第一層結構固定已知,你可以跳過第一層的結構巡視,直接做藍色那行。

    2007年7月17日 上午 10:06
    版主
  • Public Overrides Function GetSchema ( _
    	collectionName As String, _
    	restrictionValues As String() _
    ) As DataTable
    請問restrictionValues 限制值集合中new String(){TABLE_CATALOG,TABLE_SCHEMA,TABLE_NAME,TABLE_TYPE‧‧‧}
    中TABLE_CATALOG,TABLE_SCHEMA的用法,如TABLE_NAME = "資料表名稱",TABLE_TYPE = "table"
    我用TABLE_CATALOG = "Northwind" ,會出現參數錯誤,謝謝大大。
            Using connection As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Northwind.mdb")
                connection.Open()
                Dim restrictions(3) As String
                restrictions(3) = "Table"
                Dim schemaTable As DataTable = _
                    connection.GetSchema("tables", New String() {Nothing, Nothing, Nothing, "table"})
                For i As Integer = 2 To schemaTable.Rows.Count - 1
                    ComboBoxTables.Items.Add(schemaTable.Rows(i)(2).ToString)
                Next
            End Using
     
    2007年7月18日 上午 06:48
  • ?

    我前面不是這樣寫嗎?

    引文

    由於 Access 限制條件僅允許到第三欄,所以辦法

    DataTable = xxxConnection.GetSchema("Tables", New String(){Nothing, Nothing, Nothing, "TABLE"})

    限制僅傳回一般表格。

     

    就是說不行這樣用啊~~

     

    所以才說:

    引文

    所以你可以在 DataTable 下做次查詢

     

    2007年7月18日 上午 06:56
    版主