woot6768
Messages postés393Date d'inscriptionmercredi 8 mars 2006StatutMembreDernière intervention23 mars 2007
-
3 juil. 2006 à 11:10
woot6768
Messages postés393Date d'inscriptionmercredi 8 mars 2006StatutMembreDernière intervention23 mars 2007
-
4 juil. 2006 à 10:28
Salut,
J'ai un souci avec une requête, je souhaite mettre à jour une base de données via des requpetes UPDATE, mais il me génère une exception, il me dis que j'ai un nombre d'argument incorrect dans l'expression TRIM ( ).
Je vous passe le code correspondant :
String.Format(lineCmd, CIV, FULL, FIRST, LAST, Recordset.Fields[
"CONTACTSYNCID"].Value);
OdbcCommand cmd =
new
OdbcCommand(lineCmd, connection2);cmd.ExecuteNonQuery();//C'est sur cette ligne que l'exeption est générée.
De plus, lorque j'enlève les 'TRIM()', il me dis qu'il y a une erreur dans la syntaxe 'UPDATE'.
Je ne trouve pas de solution sur le net, donc est-ce que quelqu'un disposerait d'un lien ou même mieux, d'une réponse!
Merci
woot6768
Messages postés393Date d'inscriptionmercredi 8 mars 2006StatutMembreDernière intervention23 mars 2007 4 juil. 2006 à 10:28
Salut,
J'ai trouvé le souci, ça fonctionne maintenant, grâce à 628847 dgouttegattat que je remercie et grâce, à quelques idées de recherches que l'on m'a fournis. Le problème était situé au niveau de la requête UPDATE, J'ai codé WHERE CONTACTSYNID = {4} au lieu de WHERE CONTACTSYNCID= {4} .
woot6768
Messages postés393Date d'inscriptionmercredi 8 mars 2006StatutMembreDernière intervention23 mars 2007 3 juil. 2006 à 14:04
Salut dgouttegattat,
J'ai mis ta solution en place, et cette fois ci, il m'affiche une autre exception, elle est la suivante : "Trop peu de paramètres. 1 attendu.".
dgouttegattat
Messages postés129Date d'inscriptionmardi 22 novembre 2005StatutMembreDernière intervention30 décembre 20073 3 juil. 2006 à 14:20
Là, je sèche...
Voyons. Si la fonction attend 1 paramètre et qu'elle en reçoit "trop peu", cela veut manifestement dire qu'elle en reçoit 0. Mais pourquoi ?
Est-ce que tu peux afficher le contenu de la variable lineCmd après le String.Format(...) et me donner le résultat ? Merci.
Vous n’avez pas trouvé la réponse que vous recherchez ?
woot6768
Messages postés393Date d'inscriptionmercredi 8 mars 2006StatutMembreDernière intervention23 mars 2007 3 juil. 2006 à 14:30
Juste après String.Format(), elle me renvoie ceci :
"UPDATE M9004_CONTACTSYNC SET CIVILITY= TRIM( '' ), FULLNAME= TRIM( '' ), FIRSTNAME= TRIM( 'YVES' ), LASTNAME= TRIM( 'JNE' ) WHERE CONTACTSYNID= 878 "
En faite je viens de comprendre! Ta solution fonctionne, le problème est que tout mes champs ne sont pas forcément remplies.
Comment faire pour que cela n'affecte pas le fonctionnement de mon code?
En plus il faut que je laisse les champs vide, je ne peu pas modifier cette base...
dgouttegattat
Messages postés129Date d'inscriptionmardi 22 novembre 2005StatutMembreDernière intervention30 décembre 20073 3 juil. 2006 à 14:47
Si tu veux que ton code fonctionne même avec des champs vides, je pense que le plus simple serait quelque chose comme ça :
<hr size="2" width="100%" />string lineCmd = "UPDATE M9004_CONTACTSYNC SET CIVILITY='{0}', FULLNAME='{1}', FIRSTNAME='{2}', LASTNAME='{3}' WHERE CONTACTYNID={4}";
...
lineCmd = String.Format(lineCmd, CIV.Trim(), FULL.Trim(), FIRSTNAME.Trim(), LASTNAME.Trim(), Recordset.Fields["CONTACTSYNCID"].Value);<hr size="2" width="100%" />Autrement dit, tu "trimmes" (je ne sais pas s'il y a un terme français pour ça...) tes chaînes de caractères dans le code C# plutôt que dans le code SQL, l'avantage étant que la méthode Trim() du type System.String() ne génère (à ma connaissance) pas d'exception lorsqu'elle est appelée sur une chaîne vide, elle renvoie simplement une chaîne vide.
Normalement, cela devrait fonctionner quel que soit l'état des champs.
À noter, le mot-clé dans la phrase précédente est normalement...
dgouttegattat
Messages postés129Date d'inscriptionmardi 22 novembre 2005StatutMembreDernière intervention30 décembre 20073 3 juil. 2006 à 15:38
???
C'est peut-être dû au fait que la base de données a été conçue de manière à interdire d'affecter des chaînes vides à certaines colonnes. Si tel est le cas, il faudrait affecter la valeur NULL (SQL, pas C#) au lieu d'une chaîne vide ''.
Peux-tu essayer d'exécuter une requête codée "en dur", du genre : "UPDATE M9004_CONTACTSYNC SET CIVILITY=NULL, FULLNAME=NULL, FIRSTNAME='YVES', LASTNAME='JNE' WHERE CONTACTSYNCID=878" et me dire si ça marche ?
Par ailleurs, quel système de base de données utilises-tu (SQL Server, Access, MySQL, ...) ?
woot6768
Messages postés393Date d'inscriptionmercredi 8 mars 2006StatutMembreDernière intervention23 mars 2007 3 juil. 2006 à 16:07
Tout d'abord, c'est une base de données Access.
Ensuite, j'ai fait ce que tu m'a dis au niveau de la requête, et ça n'a pas fonctionné (toujours la même erreur!)
J'ai aussi essayer d'initialiser les champs 'en dur' à NULL dans le code, mais sans succés!
Et enfin, j'ai tester la chose suivante qui n'a pas fonctionner non plus :
string vide = -1;
ADODB.
Field field1 = Recordset.Fields[
"CIVILITY"];
if (field1.Value !=
DBNull.Value){
if (
Convert.ToString(Recordset.Fields[
"CIVILITY"]).Length > 0){
else{ /*J'ai donc rajouter ceci pour affecter une valeur à ces champs vides mais cela n'à pas fonctionner*/CIV = vide;
break;}
Aurait-tu une autre proposition?
Je continue à chercher en parallèle, mais je rame de plus en plus...
Et puis, je suis sûr que c'est un truc tout bête!
dgouttegattat
Messages postés129Date d'inscriptionmardi 22 novembre 2005StatutMembreDernière intervention30 décembre 20073 3 juil. 2006 à 16:22
Je suis désolé, mais là, je crois bien que je suis à court d'idées.
Juste une dernière, peut-être : il faudrait ouvrir la base de données sous Access et tester les différentes requêtes SQL (avec apostrophes, sans apostrophes, avec TRIM, sans TRIM, avec NULL, ...) directement dans Access. Ça fait un bail que je n'ai plus utilisé Access, donc je ne sais plus comment on fait pour entrer du code SQL directement (sans passer par les différents assistants), mais tu devrais trouver cela dans l'aide d'Access. Cela te permettrait de trouver LA bonne syntaxe SQL qui fonctionne, que tu pourrais ensuite utiliser dans ton code.
Une dernière possibilité : comme manifestement, le problème vient davantage des instructions SQL que du code C#, tu pourrais essayer de te renseigner du côté de sqlfr.com.
Voilà, bon courage ! S'il me vient une autre idée, je t'en fais part immédiatement.
woot6768
Messages postés393Date d'inscriptionmercredi 8 mars 2006StatutMembreDernière intervention23 mars 2007 3 juil. 2006 à 17:55
Voilà, je viens rendre compte de la situation.
J'ai effectuer une batterie de test, et apparement, la syntaxe actuel est la bonne! Je viens de localiser le problème.
En faite, lorsque je test pour voir si le champs est vide, le programme fait toujours la même chose! (champs vide ou non)
Donc je repose une question qui sera (j'éspère) plus simple :
Est-ce que quelqu'un saurait comment tester si un champs d'une table est vide?
Je vous présent ci-dessous ma solution (qui ne fonctionne pas) :
ADODB.
Field field1 = Recordset.Fields[
"CIVILITY"];
if (field1.Value !=
DBNull.Value)
/*C'est donc au niveau de ces 2 test 'if' que ce situe maintenant le problème*/{
if (
Convert.ToString(Recordset.Fields[
"CIVILITY"]).Length > 0){CIV = Recordset.Fields[