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

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  [C#] Fonction addslashes

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C#] Fonction addslashes

n°1502254
cvex
$CveX
Posté le 12-01-2007 à 17:10:53  profilanswer
 

Bonsoir à tous :)
 
Etant donnée que mon programme execute des requêtes SQL, certaines données contiennent des caractères "spéciaux" du genre (" ou ')
 
Lorsque qu'un caractère spécial apparait, j'ai le droit à une erreur.
 
Jusque la tout va bien
Pour régler le problème, j'ai donc créer une fonction permettant de régler ce problème...
 
En voici son code :

Code :
  1. static string addslashes(string txt)
  2.  {
  3.   txt.Replace("'","\\'" );
  4.   txt.Replace("\"","\\\"" );
  5.   return(txt);
  6.  }


 
Le problème c'est que cette fonction n'a pas l'air de bien fonctionner et je ne vois pas d'ou peut provenir l'erreur.
Replace est une fonction adapté au problème ? Est-elle la source du problème ?
Existe-t'il une fonction plus simple ?
 
Merci d'avance
 
Edit :
J'ai trouvé que un string.Format pouvait régler le problème... Je me renseigne sur le sujet

Message cité 1 fois
Message édité par cvex le 12-01-2007 à 17:19:18

---------------
http://forum.hardware.fr/hardwaref [...] 1293-1.htm
mood
Publicité
Posté le 12-01-2007 à 17:10:53  profilanswer
 

n°1502264
pikti
I’ve done worse
Posté le 12-01-2007 à 17:22:28  profilanswer
 

Je crois que tu devrais plutôt regarder comment utiliser des SqlParameter ;)
 

n°1502275
cvex
$CveX
Posté le 12-01-2007 à 17:30:28  profilanswer
 

Bon ba le string.Format regle pas le problème...
Je regarde ce que peut faire le SqlParameter :)

n°1502478
moi23372
Posté le 13-01-2007 à 09:52:10  profilanswer
 

+1 pour les SQLParameter qui assure également une certaine sécurité :)

n°1502961
cvex
$CveX
Posté le 15-01-2007 à 10:07:37  profilanswer
 

Merci pour la découverte de cette classe :)
Seulement, lors de la requête d'insertion, lorsque je regarde la table où je réalise les insert, Eh bien il y a rien dedans mis à part le ":observation".
 
Comment je pourrais faire pour placer les différentes variables dans la requête ?
Est-ce le "PointeurLecture.GetString(6)" qui ne correspond pas ? Existe-t'il une autre fonction ou une fonction plus approriée ?
 
Petit apperçu de mon script C# :

Code :
  1. string sql = "INSERT INTO appelsclient (idAppel, CAB, dateAppel, HeureAppel, dureeAppel, interlocuteur, logPersAppel, objetAppel, `precision`, observations, SensAppel, Attitude, ticket, idAction) VALUES (\":id_appel\", \":code_abonne\", \":date_appel\", \":heure_appel\", \"\", \"\", \"\", \":objet_appel\", \"\", \":observation\", \":sens_appel\", \"\", \"\", \"\" )";
  2.      MySqlCommand Ecrire = new MySqlCommand(sql, ConnectionDB2);
  3.   
  4.      Ecrire.Parameters.Add(new MySqlParameter("id_appel", MySqlDbType.Int64, 20));
  5.      Ecrire.Parameters[0].Value = PointeurLecture.GetString(0);
  6.      Ecrire.Parameters.Add(new MySqlParameter("code_abonne", MySqlDbType.Int64, 6));
  7.      Ecrire.Parameters[1].Value = PointeurLecture.GetString(1);
  8.      Ecrire.Parameters.Add(new MySqlParameter("date_appel", MySqlDbType.Date));
  9.      Ecrire.Parameters[2].Value = PointeurLecture.GetString(2);
  10.      Ecrire.Parameters.Add(new MySqlParameter("heure_appel", MySqlDbType.Time));
  11.      Ecrire.Parameters[3].Value = PointeurLecture.GetString(3);
  12.      Ecrire.Parameters.Add(new MySqlParameter("objet_appel", MySqlDbType.Set));
  13.      Ecrire.Parameters[4].Value = PointeurLecture.GetString(8);
  14.      Ecrire.Parameters.Add(new MySqlParameter("observation", MySqlDbType.LongBlob));
  15.      Ecrire.Parameters[5].Value = PointeurLecture.GetString(6);
  16.      Ecrire.Parameters.Add(new MySqlParameter("sens_appel", MySqlDbType.Set));
  17.      Ecrire.Parameters[6].Value = PointeurLecture.GetString(7);
  18.   
  19.      Ecrire.Connection = ConnectionDB2;
  20.      try
  21.      {
  22.      Ecrire.ExecuteNonQuery();
  23.      }
  24.      catch (MySqlException e)
  25.      {
  26.       /*Console.WriteLine("\n\n\nRequete : " + sql);
  27.       Console.WriteLine("Erreur SQL : " + e + "\n\n" );*/
  28.       Console.WriteLine("Numéro de l\'enregistrement : "+nbligne);
  29.       Console.ReadLine();
  30.      }


 
Merci pour votre aide :)

Message cité 1 fois
Message édité par cvex le 16-01-2007 à 12:17:43
n°1503476
cvex
$CveX
Posté le 16-01-2007 à 09:57:37  profilanswer
 

Hum apparament il faut utiliser des variables de type ?champ1 pour que cela puisse marché mais je n'ai toujours pas trouvé la solution :(

n°1503505
pikti
I’ve done worse
Posté le 16-01-2007 à 10:35:16  profilanswer
 

cvex a écrit :

Merci pour la découverte de cette fonction :)


 
en fait il s'agit d'une classe  :D  
 

cvex a écrit :

Hum apparament il faut utiliser des variables de type ?champ1 pour que cela puisse marché mais je n'ai toujours pas trouvé la solution :(


 
J'ai toujours utilisé Sql Server 2000 et des procédures stockées, et donc dans ce cas tu peux faire un  

Code :
  1. SqlCommandBuilder.DeriveParameters(maCommande);


pour récupérer tes paramètres et leur type et ensuite les affecter.
 
Bon, si je lis bien tu fais du MySql sans procédure stockée, tu utilises donc une dll tiers, n'est-elle pas documentée ?
 
Il me semble qu'en SQL Server tu ferais quelquechose du genre :
 

Code :
  1. string sql = "INSERT INTO appelsclient (idAppel, CAB) VALUES ('@id_appel', '@code_abonne')";
  2. [...]
  3. Ecrire.Parameters.Add(new MySqlParameter("@id_appel", MySqlDbType.Int64, 20));


 
à vérifier dans la MSDN.
 
Quel est ton message d'erreur / la dll MySql que tu utilises ?


Message édité par pikti le 16-01-2007 à 10:36:11
n°1503578
cvex
$CveX
Posté le 16-01-2007 à 12:16:46  profilanswer
 

Oui, je l'ai certainement pas précisé mais je travaille avec la DLL MySQL donc c'est un peu différent d'après ce que j'ai pu voir :s
 
J'ai continuer à chercher et je suis actuellement à ce résultat la :
 

Code :
  1. while(PointeurLecture.Read())
  2.     {
  3.      string sql = "INSERT INTO appelsclient (idAppel, CAB, dateAppel, HeureAppel, dureeAppel, interlocuteur, logPersAppel, objetAppel, `precision`, observations, SensAppel, Attitude, ticket, idAction) VALUES (?id_appel, ?code_abonne, ?date_appel, ?heure_appel, \"\", \"\", \"\", ?objet_appel, \"\", ?observation, ?sens_appel, \"\", \"\", \"\" )";
  4.      MySqlCommand Ecrire = new MySqlCommand(sql, ConnectionDB2);
  5.   
  6.      Ecrire.Parameters.Add("?id_appel", MySqlDbType.Int64, 20).Value = PointeurLecture.GetString(0);
  7.       Ecrire.Parameters.Add("?code_abonne", MySqlDbType.Int64, 6).Value = PointeurLecture.GetString(1);
  8.       Console.WriteLine(PointeurLecture.GetDateTime(2).Year+"-"+PointeurLecture.GetDateTime(2).Month+"-"+PointeurLecture.GetDateTime(2).Day);
  9.       Ecrire.Parameters.Add("?date_appel", MySqlDbType.Date).Value = PointeurLecture.GetDateTime(2).Year+"-"+PointeurLecture.GetDateTime(2).Month+"-"+PointeurLecture.GetDateTime(2).Day;         
  10.    Ecrire.Parameters.Add("?heure_appel", MySqlDbType.Timestamp).Value = PointeurLecture.GetTimeSpan(3);
  11.       Ecrire.Parameters.Add("?objet_appel", MySqlDbType.Set).Value = PointeurLecture.GetString(8);
  12.       Ecrire.Parameters.Add("?observation", MySqlDbType.LongBlob).Value = PointeurLecture.GetString(6);
  13.       Ecrire.Parameters.Add("?sens_appel", MySqlDbType.Set).Value = PointeurLecture.GetString(7);
  14.      Console.ReadLine();
  15.   
  16.      Ecrire.Connection = ConnectionDB2;
  17.      try
  18.      {
  19.      Ecrire.ExecuteNonQuery();
  20.      }
  21.      catch (MySqlException e)
  22.      {
  23.       Console.WriteLine("\n\n\nRequete : " + sql);
  24.       Console.WriteLine("Erreur SQL : " + e + "\n\n" );
  25.       Console.WriteLine("Numéro de l\'enregistrement : "+nbligne);
  26.       Console.ReadLine();
  27.      }
  28.     //Console.WriteLine(myReader.GetString(0) + " | " + myReader.GetString(1));
  29.     nbligne++;
  30.     //Console.Write("." );
  31.     if(nbligne%250 == 0)
  32.     {
  33.      Console.Write("|" );
  34.     }
  35.     }


 
La classe (merci de m'avoir corriger =) ) MySQL c'est la galère :s
 
Lorsque j'execute, j'obtiens l'erreur suivante :  
 
http://img100.imageshack.us/img100/7038/erreurjn8.th.jpg

n°1503605
Tamahome
⭐⭐⭐⭐⭐
Posté le 16-01-2007 à 13:27:35  profilanswer
 

comment peut on bosser sur un sgbd qui n'implémente pas les procédures stockées... ca me dépasse ca... ca gère les Select qd meme rassure moi :D

n°1503619
cvex
$CveX
Posté le 16-01-2007 à 13:42:21  profilanswer
 

MySQL oblige :s
Si j'avais eu le choix, je croix bien que je me serais penché sur le SGBD SQL server...

mood
Publicité
Posté le 16-01-2007 à 13:42:21  profilanswer
 

n°1503623
pikti
I’ve done worse
Posté le 16-01-2007 à 13:51:05  profilanswer
 

vu ton message d'erreur tu as un problème sur un champ de type date, d'ailleurs qu'est-ce que c'est que cette horrible ligne :
 

Code :
  1. Ecrire.Parameters.Add("?date_appel", MySqlDbType.Date).Value = PointeurLecture.GetDateTime(2).Year+"-"+PointeurLecture.GetDateTime(2).Month+"-"+PointeurLecture.GetDateTime(2).Day;


 
?
 
C'est un type date, donc passe une date, non ?
As-tu tester de faire un insert tout simple, avec des types de données primitifs ?


Message édité par pikti le 16-01-2007 à 14:29:32
n°1503633
cvex
$CveX
Posté le 16-01-2007 à 14:14:50  profilanswer
 

Oui, c'est un type date. D'ailleur, j'ai esseyé le fameux :  
 

Code :
  1. Ecrire.Parameters.Add("?date_appel", MySqlDbType.Date).Value = PointeurLecture.GetDateTime(2).Date;


 
Pour ce qui est de l'insert primitifs je vais essayé tout de suite...
 
Edit : J'ai essayé l'insert primitif et la requête ce fait correctement dans la base de données donc c'est bien les SQLParameter qui marche pas trop :s


Message édité par cvex le 16-01-2007 à 14:23:04
n°1503640
pikti
I’ve done worse
Posté le 16-01-2007 à 14:32:31  profilanswer
 

il n'y a pas de problème avec SQLParameter, d'ailleurs sur l'exemple que tu donnes ci-dessus tu n'utilises pas cette classe de plus dans ton cas il s'agit de MySqlParameter :)
 
je ne sais pas quoi te dire, à part regarder la doc sur MySqlParameter et MySqlDbType.Date  :)


Message édité par pikti le 16-01-2007 à 14:33:52
n°1503690
TheFox37
pourtant chez moi, ça marche
Posté le 16-01-2007 à 15:26:09  profilanswer
 

cvex a écrit :

Bonsoir à tous :)
Etant donnée que mon programme execute des requêtes SQL, certaines données contiennent des caractères "spéciaux" du genre (" ou ')
Lorsque qu'un caractère spécial apparait, j'ai le droit à une erreur.
Jusque la tout va bien
Pour régler le problème, j'ai donc créer une fonction permettant de régler ce problème...
En voici son code :

Code :
  1. static string addslashes(string txt)
  2.  {
  3.   txt.Replace("'","\\'" );
  4.   txt.Replace("\"","\\\"" );
  5.   return(txt);
  6.  }


Le problème c'est que cette fonction n'a pas l'air de bien fonctionner et je ne vois pas d'ou peut provenir l'erreur.
Replace est une fonction adapté au problème ? Est-elle la source du problème ?
Existe-t'il une fonction plus simple ?
Merci d'avance
Edit :
J'ai trouvé que un string.Format pouvait régler le problème... Je me renseigne sur le sujet


 
Salut!
Je vais revenir sur ton problème de Replace, car tu risques de le rencontrer souvent. Tu fais une erreur d'utilisation de la fonction.
Voilà sa déclaration (cf. MSDN)

Code :
  1. public string Replace (char oldChar,char newChar)
  2. Parameters
  3. oldChar
  4. A Unicode character to be replaced.
  5. newChar
  6. A Unicode character to replace all occurrences of oldChar.
  7. Return Value
  8. A String equivalent to this instance but with all instances of oldChar replaced with newChar.


 
Return Value est LE point important : String.Replace ne s'applique pas à l'objet sur lequel tu l'appelle, mais renvoie un objet de type String avec les modifications que tu attends. Fais bien attention, beaucoup de méthodes prennent cette forme !
 
@+!


---------------
Mon FeedBack Ebay
n°1504746
Tamahome
⭐⭐⭐⭐⭐
Posté le 18-01-2007 à 19:05:45  profilanswer
 

ah oui j'avais meme pas fait gaffe a son code, ca sert a rien son Replace, il récupère pas la valeur :D

n°1504933
cvex
$CveX
Posté le 19-01-2007 à 10:23:28  profilanswer
 

J'ai beau faire comme la documentation officiel de la classe, le résultat est toujours le même :s

n°1505986
MagicBuzz
Posté le 22-01-2007 à 17:03:49  profilanswer
 

De mémoire, le format Date a prendant longtemps été un problème avec ODBC et OLE DB pour MySQL.
Perso (mais ça fait longtemps) je n'ai jamais vu une version qui les supportait correctement.
 
A mon avis, le connecteurs .NET a tout simplement le même problème. Utilises un TIMESTAMP à la place.

n°1506031
Tamahome
⭐⭐⭐⭐⭐
Posté le 22-01-2007 à 19:14:30  profilanswer
 

ou sinon il peut utiliser un vrai sgbd comme SQL Server :D

n°1506033
MagicBuzz
Posté le 22-01-2007 à 19:16:41  profilanswer
 

le kouba [:ddr555]
 
on ne frappe pas un homme déjà à terre :o


Message édité par MagicBuzz le 22-01-2007 à 19:17:14
n°1506055
Tamahome
⭐⭐⭐⭐⭐
Posté le 22-01-2007 à 20:20:47  profilanswer
 

et pourquoi pas ? SQL Server Express est gratuit et tres bien :o Comment peut on raisonnablement lui préférer mySQL ? (sauf si on est hébergé chez free, mais bon, apres on en a pour son argent : pas grand chose)

n°1506060
MagicBuzz
Posté le 22-01-2007 à 20:33:17  profilanswer
 

ha ben j'ai rien dit.
juste que je gars vient de tomber dénu en s'appercevant que MySQL est une bouse infâme, et toi tu viens lui dire qu'il existe mieux en gratuit aussi :ange:
 
c'est un coup bas moi je te dis :o

n°1506084
Tamahome
⭐⭐⭐⭐⭐
Posté le 22-01-2007 à 21:42:08  profilanswer
 
n°1512267
cvex
$CveX
Posté le 08-02-2007 à 15:39:54  profilanswer
 

xD
 
C'est très gentil à vous, le problème c'est que j'ai des contraintes... et la contrainte ici c'est notre MySQL.
 
Merci de vos interventions surtout pour le SQL Server Express :D lol
 
++

n°1513139
Tamahome
⭐⭐⭐⭐⭐
Posté le 11-02-2007 à 09:34:56  profilanswer
 

ah bah apres si tu te tires volontairement une balle dans le pied... Y'en a qui aiment les défis dans la vie :)


Message édité par Tamahome le 11-02-2007 à 09:35:07
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  [C#] Fonction addslashes

 

Sujets relatifs
fonction mail () Cc et BcProbleme avec la fonction system()
Connaitre la ligne affecté par la fonction 'UPDATEFonction bloquante et d'attente
Fonction FILE, file_get_contents qui marche pas toujours. Help!Fonction gérant les prédicats
extraire des mots en fonction de leur mise en forme[javascript]Bouton en fonction de la page
[Résolu] Exécuter une action en fonction du choix dans un menuLibérer la mémoire et fonction recvfrom
Plus de sujets relatifs à : [C#] Fonction addslashes


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