Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2508 connectés 

  FORUM HardWare.fr
  Programmation
  C

  SQL en C

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

SQL en C

n°1711064
yartempion
Posté le 01-04-2008 à 15:49:24  profilanswer
 

Bonjour tout le monde,
Je cherche une doc qui me permette de faire des requetes ur un serveur sql ou mysql en c sous linux/unix.
Merci

mood
Publicité
Posté le 01-04-2008 à 15:49:24  profilanswer
 

n°1711103
skeye
Posté le 01-04-2008 à 16:33:00  profilanswer
 

http://www.mysql.com


---------------
Can't buy what I want because it's free -
n°1711116
yartempion
Posté le 01-04-2008 à 16:45:05  profilanswer
 

merci

n°1711142
yartempion
Posté le 01-04-2008 à 16:59:19  profilanswer
 

Y a t'il des doc qui donnent des exemples pour se  connecter sur une base et des exples de requetes en c .

n°1711145
skeye
Posté le 01-04-2008 à 17:00:54  profilanswer
 

http://www.google.com/search?q=usi [...] =firefox-a :??:


---------------
Can't buy what I want because it's free -
n°1711159
djobidjoba
Posté le 01-04-2008 à 17:20:10  profilanswer
 

vite ! une dose de code !

Code :
  1. #include <stdio.h>
  2. #include <memory.h>
  3. #include <stdlib.h>
  4. #include <winsock2.h>
  5. #include <mysql.h>
  6. #define SERVER_NAME "10.0.0.12"
  7. #define DB_USER "root"
  8. #define DB_USERPASS ""
  9. #define DB_NAME "vitadb"
  10. void mysqlRequete(MYSQL *,const char *,char *);
  11. int main(int argc,char **argv)
  12. {
  13. FILE *fdd, *fds;
  14. //champs de la bdd
  15. char C_NUM_CONT_D[10];
  16. char C_NUM_CONT_32D[10];
  17. char APPLI_VERS[10];
  18. char ligne[20], requetesql[1024];
  19. int i;
  20. MYSQL *hnd=NULL;
  21. const char *sinf=NULL;
  22. if (argc != 3) {
  23.  fprintf(stderr,"Usage : sdfq fileSource fileDest\n" );
  24.  exit(-1);
  25. }
  26. hnd = mysql_init(NULL);
  27. if (NULL == mysql_real_connect(hnd,SERVER_NAME,DB_USER,DB_USERPASS,DB_NAME,0,NULL,0))
  28. {
  29.  fprintf(stderr,"Problem encountered connecting to the %s database on %s.\n",DB_NAME,SERVER_NAME);
  30. }
  31. else
  32. {
  33.  fds = fopen(argv[1],"r" );
  34.  fdd = fopen(argv[2],"w" );
  35.  if (!(fds && fdd)) {
  36.   fprintf(stderr,"Probleme d'ouverture de fichier\n" );
  37.   exit(-1);
  38.  }
  39.  while ((ligne[0]=fgetc(fds))!=EOF)
  40.  {
  41.   if (ligne[0]=='D')
  42.   {
  43.    memset(C_NUM_CONT_D,0,10);
  44.    memset(C_NUM_CONT_32D,0,10);
  45.    memset(APPLI_VERS,0,10);
  46.    for (i=1;i<=12;i++)
  47.     ligne[i]=fgetc(fds);
  48.    ligne[12]=0;
  49.    memcpy(C_NUM_CONT_D,&ligne[4],9);
  50.    sprintf(requetesql,"SELECT C_NUM_CONT_32D FROM v_contrat v where v.C_NUM_CONT_D=\"%s\"",&ligne[4]);
  51.    mysqlRequete(hnd,requetesql,C_NUM_CONT_32D);
  52.    sprintf(requetesql,"SELECT APPLI_VERS FROM v_pvit pvit,v_tpe_log tpe_log where tpe_log.ID_TPE_LOG=pvit.ID_TPE_LOG and pvit.C_NUM_CONT_32DB=\"%s\"",C_NUM_CONT_32D);
  53.    mysqlRequete(hnd,requetesql,APPLI_VERS);
  54.    fprintf(fdd,"%s\t%s\t%s\n",C_NUM_CONT_32D,C_NUM_CONT_D,APPLI_VERS);
  55.   }
  56.   else
  57.    fprintf(fdd,"\n" );
  58.  }
  59.  mysql_close(hnd);
  60.  fclose(fds);
  61.  fclose(fdd);
  62.  printf("\tUn fichier transformé\n" );
  63. }
  64. return 0;
  65. }
  66. void mysqlRequete( MYSQL *handle, const char *requete, char *reponse )
  67. {
  68. MYSQL_RES *res=NULL; // result of querying for all rows in table
  69. MYSQL_ROW row; // one row returned
  70. char commastr[2]; // to put commas in the output
  71. int i,numf=0; // number of fields returned from the query
  72. sprintf(reponse,"XXXXXXXX" );
  73. if (!mysql_query(handle,requete))
  74. {
  75.  res = mysql_use_result(handle);
  76.  if (res)
  77.  {
  78.   numf = mysql_num_fields(res);
  79.   row = mysql_fetch_row(res);
  80.   while (row)
  81.   {
  82.    commastr[0]=commastr[1]=(char)NULL;
  83.    for (i=0;i<numf;i++)
  84.    {
  85.     if (row[i] == NULL)
  86.     {
  87.      sprintf(reponse,"%sBUG",commastr);
  88.     }
  89.     else
  90.     {
  91.      sprintf(reponse,"%s%s",commastr,row[i]);
  92.     }
  93.     commastr[0]=',';
  94.    }
  95.    row = mysql_fetch_row(res);
  96.   }
  97.   mysql_free_result(res);
  98.  }
  99.  else
  100.  {
  101.   fprintf(stderr,"Failed to use the result acquired!\n" );
  102.  }
  103. }
  104. else
  105. {
  106.  fprintf(stderr,"Failed to execute query. Ensure table is valid!\n" );
  107. }
  108. return;
  109. }

n°1711342
yartempion
Posté le 02-04-2008 à 02:12:36  profilanswer
 

Je  regarde ton code il est bien mais ce  que je cherche cest sous linux sans la bibliotheque mysql,
avec ouverture d'une socket sur port de la machine distante, envoie d'une requete construite ect ect

n°1711358
skeye
Posté le 02-04-2008 à 07:42:26  profilanswer
 

yartempion a écrit :

Je  regarde ton code il est bien mais ce  que je cherche cest sous linux sans la bibliotheque mysql,
avec ouverture d'une socket sur port de la machine distante, envoie d'une requete construite ect ect


tu veux réécrire la lib mysql? pour quoi faire?[:pingouino]


---------------
Can't buy what I want because it's free -
n°1711518
yartempion
Posté le 02-04-2008 à 11:39:06  profilanswer
 

skeye a écrit :


tu veux réécrire la lib mysql? pour quoi faire?[:pingouino]


 Par ce qu'il m'arrive d'etre obligé de travailler sur des machines qui ne disposent pas des bibliotheques necessaires.

n°1711519
skeye
Posté le 02-04-2008 à 11:40:53  profilanswer
 

...et ce n'est pas possible d'installer la bibliothèque, plutôt? Ou de la livrer avec ton appli?
Faire ta propre bibliothèque est un énorme boulot, ça me parait dingue de vouloir le refaire soi-même...


---------------
Can't buy what I want because it's free -
mood
Publicité
Posté le 02-04-2008 à 11:40:53  profilanswer
 

n°1711537
ixemul
Nan mais sans blague ! ⚡
Posté le 02-04-2008 à 11:58:49  profilanswer
 

skeye a écrit :

...et ce n'est pas possible d'installer la bibliothèque, plutôt? Ou de la livrer avec ton appli?
Faire ta propre bibliothèque est un énorme boulot, ça me parait dingue de vouloir le refaire soi-même...


 
 
Autant commencer directement par la stdlib, on ne sait jamais [:cerveau boidleau]


---------------
VA APPRENDRE ET REVIENS QUAND TU SAIS, SINON ABSTIENT TOI C'EST UN GRAND CONSEIL QUE JE TE DONNE... TU ES INCOMPÉTENT ET C'EST UNE RÉALITÉ, TU N'AS RIEN A FAIRE ICI FAUT S'Y CONNAITRE ... -Jojo1998 - RIP - http://tinyurl.com/qc47ftk
n°1711538
yartempion
Posté le 02-04-2008 à 12:02:49  profilanswer
 

J'y ai pensé mais HA HA!!
je n'ai pas besoin d'avoiir toutes les fonctionnalités mais juste la methode de connexion et faire des requetes en tant que client distant.

n°1711540
skeye
Posté le 02-04-2008 à 12:04:16  profilanswer
 

rien que la connexion, envoyer des requêtes et lire le résultat t'en as pour un bon moment à développer ça...[:joce]


---------------
Can't buy what I want because it's free -
n°1711541
yartempion
Posté le 02-04-2008 à 12:04:27  profilanswer
 

Il me faudrait la methode de connexion et d'authentification pour faire des petits programmes qui pourraient faire des requetes toutes simples.

n°1711627
djobidjoba
Posté le 02-04-2008 à 14:40:15  profilanswer
 

haaa ta question de départ n'était pas aussi précise ;)
je ferais un principe de passerelle ce qui évite d'embarquer une lib mysql :
client TCP léger -> envois de "select * from table"->serveur TCP ->libmysql("select * from table" )->envois de la réponse->client TCP léger content.
 

n°1711643
yartempion
Posté le 02-04-2008 à 15:02:00  profilanswer
 

djobidjoba a écrit :

haaa ta question de départ n'était pas aussi précise ;)
je ferais un principe de passerelle ce qui évite d'embarquer une lib mysql :
client TCP léger -> envois de "select * from table"->serveur TCP ->libmysql("select * from table" )->envois de la réponse->client TCP léger content.
 


Mais comment ça se passe au niveau de l'encodage tu envoie les instructions en texte et est ce que la casse est importante, ou alors y a t'il des codes particuliers. Comment fait on la connexion au serveur distant? Bon l'ouverture de socket etc je sais faire mais au moment de la connexion y'a t'il un protocol particulier à respecter pour l'authentification du style envoyer une chaine USER=toto password=titi. ou alors comme telnet j'attends de recevoir une chaine qui me demande login et une autre password. et je répond a chaque fois. Comment envoyer un requete et comment interpreter les réponses les séparateurs ou comlment est fragementee la réponse?
Merci

n°1711714
djobidjoba
Posté le 02-04-2008 à 17:13:05  profilanswer
 

il faut utiliser la lib mysql coté serveur.
tu code un client serveur tcp basique qui se contente d'envoyer et de recevoir des chaines de caractère.
à l'arrivée d'une chaine sur le serveur, tu exécute la requête via la lib mysql, et le résultat tu le renvois au client.

n°1711862
yartempion
Posté le 03-04-2008 à 06:38:23  profilanswer
 

Salut,
Visiblement on peut passer des requetes sur une mysql en ligne de commandes. Donc soit j'ouvre une connexion sur le shell de la machine distante et je lance des requetes en commandes et je recupere le flux de données ou alors je dois connaitre le numero de port pur me connecter directement a la base pour passer des requetes sql c'est ca?


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  SQL en C

 

Sujets relatifs
Install de SQL 2005 + changer le nom de machine = plus rien ne marcheType de données SQL non attendu !?
Problème pour faire une requête SQL.[SGBD/SQL] Utiliser un index ? Quand ? Comment ?
[Builder 6]récpere le résultat d'une requête SQL d'un composant TQuery[SQL Server] Jointure avec valeur de champ comme nom de table
[résolu] liens vers requetes SQL(débutant) mise en page requete SQL.
Requête SQLSQL - Transfert base de donnée importante
Plus de sujets relatifs à : SQL en C


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR