Avatar billede jesper_dk Nybegynder
23. oktober 2004 - 09:01 Der er 5 kommentarer og
1 løsning

hente tabelnavne i database

Hej

Jeg er ved at lave en lille applikation der kan generer basis klasser ud fra strukturen i en database.

Jeg har fået det lavet og det virker fint.

Jeg har dog en lille forbedring jeg gerne vil have lavet.

Når jeg skal hente tabellerne i min database og lave dem om, bliver jeg nød til at give mit program navne på de tabeller der findes i databasen, da jeg så laver en sql-sætning på dem.

Er der nogen måde jeg kan få fat i alle de tabeller der ligger i en database uden at skulle kende tabelnavnet?

Jeg arbejder med Access og bruger ADO.NET
Avatar billede arne_v Ekspert
23. oktober 2004 - 09:29 #1
SELECT Name FROM MSysObjects WHERE Type=1
Avatar billede arne_v Ekspert
23. oktober 2004 - 09:47 #2
SELECT name,flags
FROM MSysObjects
WHERE type=1 AND flags=0

så undgår du de skjulte tabeller
Avatar billede arne_v Ekspert
23. oktober 2004 - 09:48 #3
SELECT name
FROM MSysObjects
WHERE type=1 AND flags=0
Avatar billede jesper_dk Nybegynder
23. oktober 2004 - 11:57 #4
ser ud til at virke inde fra Access men når jeg prøver at gøre det samme fra mit program få rjeg følgende fejl:

Poster kan ikke læses, fordi der ikker tilladelse til at læse i MSysObjects

ved du hvordan jeg giver tilladelse til at læse i den.
Avatar billede arne_v Ekspert
23. oktober 2004 - 15:27 #5
Der er en eller anden absurd ADO/OLEDB restriktion !

Men så gør vi det bare på en anden måde.

Se her:

using System;
using System.Data;
using System.Data.OleDb;

class MainClass
{
    public static void Main(string[] args)
    {
        OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\Database\\MSAccess\\Test.mdb");
        con.Open();
        /*
        OleDbCommand cmd = new OleDbCommand("SELECT name FROM MSysObjects WHERE type=1 AND flags=0", con);
        OleDbDataReader rdr = cmd.ExecuteReader();
        while(rdr.Read()) {
            Console.WriteLine(rdr[0]);
        }
        */
        string[] criteria = {null, null, null, "TABLE" };
        DataTable dt = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, criteria );
        for(int i = 0; i < dt.Rows.Count; i++)
        {
            Console.WriteLine(dt.Rows[i][2]);
        }
        con.Close();
    }
}
Avatar billede arne_v Ekspert
06. november 2004 - 17:50 #6
OK ?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester