C# adatbáziskezelés, táblák kiolvasása

 ( Lightgod | 2010. április 15., csütörtök - 22:13 )

Hali mindenkinek!

Volna egy olyan problémám hogy c#-os adatbázis kezelő fejlesztésbe fogtam, próbálok univerzalitás felé irányulni, ezért célom hogy bármilyen adatbázist megnyisson a programom. Az alábbi forráskód részletbe kellene egy kis segítség:

OleDbConnection connect = new OleDbConnection();
connect.ConnectionString = "Provider = Microsoft.ACE.OLEDB.12.0; Data Source=" + Open_File.FileName + ";"/*UID ="+frmdbinfo.nev+";PASSWORD="+frmdbinfo.jelszo+";"*/;
connect.Open();
OleDbDataAdapter Adapter = new OleDbDataAdapter();
Adapter.SelectCommand = new OleDbCommand("SELECT * FROM XYZ", connect);
Adapter.Fill(dataset);

Az xyz az a kijelölendő adatbázistábla nevét jelöli. Azt szeretném hogy valahogy kijelölje az összes adatbázist, ehhez viszont a táblák nevét tudnom kéne csatlakozás után. A kérdésem, mivel lehetne megkapni ezt az adatot? A próba adatbázis *.accdb kiterjesztésű és ezt leszámítva a jelenlegi állapotában működik a progi.

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Az általános adatbázis kezelést úgy gondoltad, hogy te egy library-t írsz amivel egy réteget illesztesz be a az adott motor (access/mysql/pgsql/mssql...) és a libraryt (assemblyt)
felhasználó alkalmazás közé ? Ha igen, akkor mire jó ez új-gyakorlaton kívül ?
Amúgy az adatbázis táblák nevei ms access (feltételezem a ConnectionString és a kiterjesztés alapján) esetén:
SELECT MSysObjects.Name FROM MSysObjects WHERE MSysObjects.Type = 1
Más adatbázis típusnál más, ehhez pontosan kell tudni, hogy mihez kapcsolódtál.

LINQ

Az msaccess fájl-beli táblák listáját akarod?

sbela leírta a query-t.

Viszont ha bármely rdbms-t kezelni tudó alkalmazást akarsz, akkor ne írj új model réteget, mert az OleDbConnection már az.

--
"SzAM-7 -es, tudjátok amivel a Mirage-okat szokták lelőni" - Robi.

No megvan a megoldás
Közvetve ebből kaptam meg: SELECT MSysObjects.Name FROM MSysObjects WHERE MSysObjects.Type = 1
mivel hozzáférési hibát írt ki ami egy kis googleval rávezetett egy alternatívára:

DataTable datatables;
string [] tblrestrictions = new string[4]{null, null, null, "TABLE"};
datatables = connect.GetSchema("tables", tblrestrictions);

Innen a harmadik oszlop tartalmazza a tábla neveket {TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE} amihez írtam egy függvényt ami visszaadja egy tömbben a táblaneveket:

public string[] list_datatables(DataTable data)
{
string[] datatables = new string[data.Rows.Count];
for (int i = 0; i < data.Rows.Count; i++)
{
datatables[i] = data.Rows[i][2].ToString();
}
return datatables;
}

:)

na végre valaki aki képes google-t használni.

--
"SzAM-7 -es, tudjátok amivel a Mirage-okat szokták lelőni" - Robi.