Bonjour à tous.

Je m'excuse par avance si jamais je n'aurais pas posté dans la section approprié, puis que vous allez voir mon problème traite aussi bien du C# que du SQL.
Voila en fait j'aimerai récupérer les noms des tables figurant dans ma base de donnée Paradox via mon programme en C#. Je me suis bien entendu renseigner sur le net afin de voir quelles possibilités s'offraient à moi, j'en est trouvé 2 :

1. Utiliser une requete SQL : "show tables"
Voici le code : (de mémoire)

string chaineConnection = ..... //la chaine de connection a la BDD
OdbcConnection connectionODBC = new OdbcConnection (chaineConnection );
connectionODBC .Open();
string requete = "show tables";
OdbcDataAdapter dataAdapter = new OdbcDataAdapter(requete, connectionODBC);
DataTable resultatRequete = new DataTable();
dataAdapter.Fill(resultatRequete );

//sachant que chaque ligne du DataTable contient un résultat, il suffit ensuite de l'analyser pour récupérer l'ensemble des noms de la table.

Cette façon de procéder fonctionne très bien pour MySQL et d'autres SGBDR récents mais malheureusement cette requête "show tables" ne passe pas sous Paradox et ne répond donc pas à mon problème. Je me suis donc penché sur la 2ième solution.

2. Utiliser directement la méthode "getSchema()" de l'objet "OdbcConnection" qui nous retourne un certains ensemble de métadonnées suivant les paramètres spécifiés.
Voici le code (désolé pour la mise en page, je n'ai pas réussi à résoudre ces problèmes de tabulations) :

public List<string> ObtenirNomsTablesBDD()
{
//variables
List<string> nomsTables = null;
DataTable resultatRequete = null; //dataTable rempli avec le nom des tables de la BDD suite à l'exécution de notre requête
int nbrTables = 0; //nombre de tables présentes dans la BDD
DataRow ligne = null; //utilisée dans la boucle For pour plus de lisibilité
try
{
resultatRequete = this.connectionODBC.GetSchema(OdbcMetaDataCollectionNames.Tables); //récupère le nom des tables de la BDD
nbrTables = resultatRequete.Rows.Count; //on récupère le nombre de tables répertoriées dans la BDD(chaque ligne du DataTable contient le nom d'une table de la BDD)
if (nbrTables > 0) //si la BDD contient des tables
{
//on instantie la liste qui contiendra le noms de toutes les tables
nomsTables = new List<string>();
//on récupère ensuite un à un les noms de ces tables
string nomTable = "";
for (int i = 0; i < nbrTables; i++)
{
//on récupère un par un le nom des tables de la BDD
ligne = resultatRequete.Rows[i];
//NB : en debuggeant on s'aperçoit que "ligne[0]" contient le chemin de la BDD, "ligne[1]" ?, "ligne[2]" le nom de la table, "ligne[3]" le type (TABLE), "ligne[4]" ?
nomTable = ligne[2].ToString(); //on recupere le nom de la table
//on l'ajoute à la liste
nomsTables.Add(nomTable);
}
}
}
catch (Exception exception)
{
throw new Exception("La récupération des noms des tables de la BDD à échoué");
}
return nomsTables;
}

Cette méthode fonctionne très bien lorsque l'on utilise une chaine de connection passant par un DSN : string chaineConnection = "DSN=nomBDD";
Mais, et c'est là tout mon problème, elle ne fonctionne pas pour une chaine de connection de ce type ("chaine officielle" trouvée sur ce site http://www.connectionstrings.com/paradox) : string chaineConnection = "Driver={Microsoft Paradox Driver (*.db )};DriverID=538;Fil=Paradox 5.X;DefaultDir=cheminBDD;Dbq=cheminBDD;CollatingSequence=ASCII;";
J'ai pourtant remanier plusieurs fois cette chaine de connection et procéder à différents tests mais rien n'y fait, dès qu'il s'agit d'utiliser un chemin plutôt qu'un DSN cela ne fonctionne pas (j'obtiens 0 pour le nombre de tables);
Alors là vous me dirais pourquoi ne pas utiliser le DSN, tout simplement que j'ai un certains nombre de contrainte dans ce projet dont celle de ne pas créer de référence à la BDD via l'outil d'administration de BDD de Windows, mais plutôt utiliser le chemin de localisation de cette BDD.

Voilà étant à court de solutions, je m'en remet à vous.
PS : désolé pour le pavet mais c'était nécessaire pour que vous compreniez bien mon problème.

Merci.