1

以下のコードは、特定のテーブル ("Employee") のフィールドを返しますが、特定のデータベース内のすべてのテーブルのフィールドを返す必要があります。これは可能ですか? 私の仮定は、データベース内のテーブルをループして対応するフィールドを出力する For ループですが、私の努力は無駄に思えます

Public Sub getDbFields()

    Dim i As Integer
    Dim dbcon As New System.Data.OleDb.OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source = " & dblocation & _
                                               "\" & dbname)
    Try

        dbcon.Open()
        dbDt = dbcon.GetOleDbSchemaTable(OleDb.OleDbSchemaGuid.Columns, New Object() _
                                         {Nothing, Nothing, "Employee", Nothing})

        For i = 0 To dbDt.Rows.Count - 1
            'compile lbtables with a list of available tables from the database
            newLine()
            frmMain.lstTables.Items.Add(dbDt.Rows(i)!COLUMN_NAME.ToString())
        Next

    Catch ex As Exception
        MessageBox.Show(ex.Message.ToString(), "Data Load Error", MessageBoxButtons.OK,
            MessageBoxIcon.Exclamation)
    End Try

End Sub

このルーチンは、チェックボックスの選択から起動されます

4

1 に答える 1

0

これにより、データベースのすべての列が返されます

Using con = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;" + 
                          "Data Source=" + dblocation + "\" + dbname)
    con.Open()
    Dim schema as DataTable = con.GetSchema("COLUMNS")
    Dim dr as DataRow
    For Each dr in schema.Rows
        Dim tablename as string = dr("TABLE_NAME").ToString()    
        if Not tablename.StartsWith("MSys") then
            Console.WriteLine(dr("TABLE_NAME").ToString() + " " + dr("COLUMN_NAME").ToString())
        End if        
    Next    
End Using

バング (!) 構文は vb.net では使用できないことに注意してください。
また、変更するとコードが機能する可能性があります

 dbDt = dbcon.GetOleDbSchemaTable(OleDb.OleDbSchemaGuid.Columns, New Object() _ 
                                          {Nothing, Nothing, Nothing, Nothing}) 

そしてこの行

frmMain.lstTables.Items.Add(dbDt.Rows(i)("COLUMN_NAME").ToString()) 
于 2012-08-22T13:05:58.383 に答える