Précédent   Forum des professionnels en informatique > Bases de données > Autres SGBD > SQLite
SQLite Forum d'entraide SQLite
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/07/2008, 18h02   #1
Nouveau Membre du Club
 
Inscription : mai 2005
Messages : 182
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 182
Points : 39
Points : 39
Par défaut commande PRAGMA en ODBC

Bonjour

je suis en C# et je cherche a retrouver le nom des colonnes d'une table. Je me connecte en ODBC sur une table SQLITE.
Pour ca j'ai trouvé la commande PRAGAM (qui marche tres bien dans un console).

mais quand j'exécute la commande (en C#) je n'ai pas de retour ni de code erreur.
voici un extrait du code :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public new ArrayList RetrieveColumns( string TABLE ) {
	ArrayList myList = new ArrayList();
	try {
		myCommand.CommandText = "PRAGMA table_info(" + TABLE + ")";
		Logger.debug_( "SQL Command: " + this.myCommand.CommandText );
 
		OdbcDataReader MyDataReader = myCommand.ExecuteReader();
		while ( MyDataReader.READ() ) {
			myList.ADD( System.Convert.ToString( MyDataReader[ 1 ] ) );
		}
		MyDataReader.Close();
		while ( MyDataReader.READ() ) {
			myList.ADD( System.Convert.ToString( MyDataReader[ 1 ] ) );
		}
		MyDataReader.Close();
	}
	catch ( Exception ex ) {
		Logger.exception_( "DB retrieveColumns: " + ex.ToString() );
			}
	RETURN myList;
		}
Je ne comprends pas pourquoi je n'ai pas de réponse.

Est ce que qq un pourrait m'aider ?

merci a bientot

j'ai installé les derniers drivers
yupa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2008, 00h44   #2
Membre actif
 
Inscription : décembre 2004
Messages : 169
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 169
Points : 175
Points : 175
Bonjour,

Je ne sais pas si le pilote ODBC que tu utilises traduit ou non la requête SQL. Je me souviens d'une instruction pour un pilote ODBC : SqlPassThru. Cela permettait au pilote de transmettre la chaine SQL sans tenter de la traduire. C'est une piste de recherche (google est ton ami dans ce cas), mais je ne dis pas que c'est ce qui t'arrive.

Par contre, si tu n'y arrives pas, alors il faut chercher plus loin...
Par exemple, le code source du driver SQLiteODBC se situe ici :
http://www.ch-werner.de/sqliteodbc/h...8c-source.html

On peut retrouver ceci :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Dans la fonction :
02108 static void
02109 fixupdyncols(STMT *s, DBC *d)
...
02184         sql = sqlite3_mprintf("PRAGMA table_info(%Q)", s->dyncols[i].TABLE);
02185         IF (!sql) {
02186             continue;
02187         }
02188         dbtraceapi(d, "sqlite3_get_table", sql);
02189         ret = sqlite3_get_table(d->sqlite, sql, &rowp, &nrows, &ncols, NULL);
02190         sqlite3_free(sql);
02191         IF (ret != SQLITE_OK) {
02192             continue;
02193         }
02194         k = findcol(rowp, ncols, "name");
02195         t = findcol(rowp, ncols, "type");
02196         pk = findcol(rowp, ncols, "pk");
02197         nn = findcol(rowp, ncols, "notnull");
Ce qui me fait dire que le pilote sait retrouver les colonnes d'une table justement à l'aide du PRAGMA et que tu pourrai utiliser cette connaissance au lieu de relancer le PRAGMA.
Par exemple :
SQLPrimaryKeys() retrouve les clés primaires...
SQLTables()... pour les tables
SQLColumns()... pour les colonnes
SQLColAttribute()... comme son nom l'indique
etc...

Bref, le développeur du pilote l'a déjà fait. Pourquoi réinventer la roue ?

a+
bigane est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h35.


 
 
 
 
Partenaires

Hébergement Web