[ADO.NET]Ophalen database-schema (met C#)

Pagina: 1
Acties:

  • Grimm9mm
  • Registratie: Maart 2000
  • Laatst online: 14-05 20:22
Ik ben bezig met een databaseclient in C# en winforms, maar ik kan maar niet vinden hoe ik van een database (in mijn geval gewoon een access-mdb) dynamisch het database-schema kan ophalen in een dataset. Ik wil namelijk onafhankelijk van de database de gegevens weergeven. Maar al wil je met een DataAdapter werken, dan moet je elke keer select-commands sturen in SQL, en daarvoor moet je de tabelnaam weten.

Iemand een idee?

  • whoami
  • Registratie: December 2000
  • Laatst online: 17:38
DataAdapter.FillSchema :?

Ik begrijp eigenlijk niet goed wat je precies wilt. Wil je de kolomnamen van een tabel te weten komen, of wil je de tabelnaam te weten komen?
Wat wil je doen?

[ Voor 77% gewijzigd door whoami op 21-10-2003 14:31 ]

https://fgheysels.github.io/


  • EfBe
  • Registratie: Januari 2000
  • Niet online
Kan niet. Je moet eigen queries maken per database om schemas op te halen. Je kunt wel wat naar boven halen met FillSchema, maar daar heb je ook al wat info bij nodig (nl. een select).

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • Grimm9mm
  • Registratie: Maart 2000
  • Laatst online: 14-05 20:22
Damnit... lekker irritant dus, ik kan namelijk wel DDL'en via de commando's CREATE DATABASE en DROP DATABASE, e.d., maar ik kan dus geen informatie over de huidige situatie opvragen...

  • whoami
  • Registratie: December 2000
  • Laatst online: 17:38
Je kan wel table-definities, relaties, etc.... uit de database halen. Daarvoor zal je de systeemtabellen moeten uitlezen, maar dat is voor ieder type DBMS (Oracle, Sql Server, ...) anders.

https://fgheysels.github.io/


  • SuperRembo
  • Registratie: Juni 2000
  • Laatst online: 20-08-2025
Zoek je dit?

C:
1
2
3
4
5
6
7
8
public DataTable GetTables(OleDbConnection conn)
{
  conn.Open();
  DataTable schemaTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,
                                                   new object[] {null, null, null, "TABLE"});
  conn.Close();
  return schemaTable;
}

| Toen / Nu


  • EfBe
  • Registratie: Januari 2000
  • Niet online
Oja, die oledb functie. Die werkt op zich wel, alleen niet alle functies werken bij alle databases. (SqlServer bv ondersteunt een heel scala niet). Dan moet je dus naar de system tables of de INFORMATION_SCHEMA views.

Maar wellicht is die oledb functie toereikend. Ik gebruik hem ook voor sommige schema zaken. Kijk ook even in oledb.h van de platform sdk in visual studio.net voor de betekenis van sommige getallen :)

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • SuperRembo
  • Registratie: Juni 2000
  • Laatst online: 20-08-2025
Ik heb 't even uitgeprobeerd met een access-mdb. De volgende schema tables worden ondersteund:
Columns
Constraint_Column_Usage
Foreign_Keys
Indexes
Key_Column_Usage
Procedures
Tables
Tables_Info
Table_Constraints

Alleen is de informatie nog wat cryptisch. DATA_TYPE 3 (=int), 7=(datetime), 130(=varchar).

| Toen / Nu


  • LoekD
  • Registratie: Augustus 2000
  • Laatst online: 09-08 16:24
Wellicht iets minder cryptisch:
code:
1
System.Data.OleDb.OleDbType odbt = (System.Data.OleDb.OleDbType)DATA_TYPE;

loading...

Pagina: 1