Instruction Update (sql) [Résolu]

Fildomen 805 Messages postés jeudi 22 mai 2003Date d'inscription 30 octobre 2010 Dernière intervention - 24 oct. 2004 à 11:44 - Dernière réponse : Fildomen 805 Messages postés jeudi 22 mai 2003Date d'inscription 30 octobre 2010 Dernière intervention
- 25 oct. 2004 à 22:54
salut
j'ai fais un ptit bout de code, qui semble juste, pour modifier ma base de données, mais ma base ne se modifie pas,pouvez-vous m'expliquez pourquoi???

Declarations:
private OleDbCommand BaseCom = new OleDbCommand();
private OleDbDataReader BaseRe;

Code:

id = 30;
BaseCom.Parameters.Clear ();
BaseCom.CommandText = "Update Membres Set DV=@DV where ID = @ID"; //mettre à jour la date de la dernière visite
BaseCom.Parameters.Add("@ID",OleDbType.Integer );
BaseCom.Parameters.Add("@DV",OleDbType.Date );
BaseCom.Parameters["@DV"].Value = DateTime.Now;
BaseCom.Parameters["@ID"].Value = Convert.ToInt32(id);
BaseRe = BaseCom.ExecuteReader();
BaseRe.Read();
BaseRe.Close();

Tous ca pour mettre à jour la date de la dernière visite d'un membre (DV)

merci
http://www.devportail.tk
Afficher la suite 

13 réponses

Répondre au sujet
Fildomen 805 Messages postés jeudi 22 mai 2003Date d'inscription 30 octobre 2010 Dernière intervention - 25 oct. 2004 à 22:54
+3
Utile
ca marche comme ca:
BaseCom.CommandText "UPDATE Membres SET DV "" + DateTime.Now.ToString() + " " WHERE (ID = @ID)";//mettre à jour la date de la dernière visite
BaseCom.Parameters.Add("@ID",OleDbType.Integer);
BaseCom.Parameters["@ID"].Value = id;
BaseCom.ExecuteNonQuery();

le problème était dans le OleDbType de DV, dans acces, j'ai mis Date/Time, et là, j'ai éssayé tout, rien ne marche, pour l'ecrire la première fois, c'est OleDbType.Date, après pour la modification, y a pas comment faire, le msdn dit OleDbType.DBTimeStamp, mais ca marche pas aussi, maintenant tout marche bien, mais, j'aime bien que ca soit avec les paramètres, c'est plus rapide

merci pour vous tous
http://www.devportail.tk
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Fildomen
TheSaib 2369 Messages postés mardi 17 avril 2001Date d'inscription 26 décembre 2007 Dernière intervention - 24 oct. 2004 à 12:11
0
Utile
BaseRe = BaseCom.ExecuteReader();
BaseRe.Read();
BaseRe.Close();

Déjà ca ca sert a rien...

Si tu n'utilises pas le reader fait un ExecuteNonQuery en plus de çà c'est fait pour çà et ca te renvoit ne nombre de lignes modifiées.

::|The S@ib|::
MVP C#.NET
Commenter la réponse de TheSaib
Fildomen 805 Messages postés jeudi 22 mai 2003Date d'inscription 30 octobre 2010 Dernière intervention - 24 oct. 2004 à 12:24
0
Utile
Merci , mais ca ne résoud pas le problème :-(

http://www.devportail.tk
Commenter la réponse de Fildomen
TheSaib 2369 Messages postés mardi 17 avril 2001Date d'inscription 26 décembre 2007 Dernière intervention - 24 oct. 2004 à 12:27
0
Utile
Il te renvoit combien de lignes modifié ??

est tu sur que DV=@DV arrive un jour ?

::|The S@ib|::
MVP C#.NET
Commenter la réponse de TheSaib
Fildomen 805 Messages postés jeudi 22 mai 2003Date d'inscription 30 octobre 2010 Dernière intervention - 24 oct. 2004 à 16:59
0
Utile
il me renvoit 0 ligne modifié, je précise que ID est un NuméroAuto,je suis sur que "ID = @ID" peut se provoquer, je c via le acces qu'il a un enregistrement dont id = 30, mettez à jou cette ligne:

BaseCom.Parameters["@ID"].Value = Convert.ToInt32(id);
à
BaseCom.Parameters["@ID"].Value = id;//c'est déjà un integer

http://www.devportail.tk
Commenter la réponse de Fildomen
TheSaib 2369 Messages postés mardi 17 avril 2001Date d'inscription 26 décembre 2007 Dernière intervention - 24 oct. 2004 à 18:58
0
Utile
Si il te renvois 0 ligne modifié c'est par conséquent que ta requete est forcement erronée.

Regarde la valeur de ta requete , et teste la sous access, tu verras ca devrais rien faire non plus.

::|The S@ib|::
MVP C#.NET
Commenter la réponse de TheSaib
Fildomen 805 Messages postés jeudi 22 mai 2003Date d'inscription 30 octobre 2010 Dernière intervention - 24 oct. 2004 à 19:44
0
Utile
je suis sur que tout est en règle, je pense qu'il y a qu'une facon de faire ca, en utilisant des trucs appellés DataSet que je c pas à koi qu'ils servent,car je 'ai pas trouvé un prog c# qui fait l'update avec ma facon, tu trouve pas???

merci commême pour ton aide, et j'espère qu'on va trouver la solution de ce problème.

http://www.devportail.tk
Commenter la réponse de Fildomen
TheSaib 2369 Messages postés mardi 17 avril 2001Date d'inscription 26 décembre 2007 Dernière intervention - 24 oct. 2004 à 21:03
0
Utile
Ton code est tout a fait correct , les DateSet and co , c'est autre chose, autre utilisation ou autre procédé. Si l'erreur ne venait pas de ta base , le framework t'enverrais une erreur.

::|The S@ib|::
MVP C#.NET
Commenter la réponse de TheSaib
Fildomen 805 Messages postés jeudi 22 mai 2003Date d'inscription 30 octobre 2010 Dernière intervention - 24 oct. 2004 à 21:41
0
Utile
Maintenant je suis sur que le problème ne vient pas de mon code, voila une source que j'ai trouvé dans ce site, télécharge là et démarre directement le exe, ici, on peux taper des commandes sql, et là, tape cette commande:
( update employés set téléphone "eee" where nom "Yvan" )

et là tu vas voir que ca change rien

la source --> http://www.csharpfr.com/code.aspx?id=11486

http://www.devportail.tk
Commenter la réponse de Fildomen
Arthenius 1183 Messages postés mercredi 21 janvier 2004Date d'inscription 6 septembre 2011 Dernière intervention - 25 oct. 2004 à 10:40
0
Utile
tu n'as pas rajoute ton objet connection a ton objet commande :

BaseCom.Connection = TonObjetConnection;


de plus avant de faire un executeNonQuery, il faut faire un open sur ta connection

TonObjetConnection.Open();
int retour = BaseCom.ExecuteNonQuery();
TonObjetConnection.Close();
MessageBox.Show("Nb Ligne modifiée : " + retour.ToString());


Arthenius

"Ce qui ne me tue pas, me rend plus fort..."
Commenter la réponse de Arthenius
Fildomen 805 Messages postés jeudi 22 mai 2003Date d'inscription 30 octobre 2010 Dernière intervention - 25 oct. 2004 à 18:11
0
Utile
c'est déjà fait en haut de mon code

http://www.devportail.tk
Commenter la réponse de Fildomen
Arthenius 1183 Messages postés mercredi 21 janvier 2004Date d'inscription 6 septembre 2011 Dernière intervention - 25 oct. 2004 à 18:24
0
Utile
ben on le voit pas sur ce que tu as poster....
donc je me suis dis que ca pourrait venir de la....

tu peux mettre ton code complet....

avec ton objet connect et tout et tout...

ca pourrait aider....

Arthenius

"Ce qui ne me tue pas, me rend plus fort..."
Commenter la réponse de Arthenius
Fildomen 805 Messages postés jeudi 22 mai 2003Date d'inscription 30 octobre 2010 Dernière intervention - 25 oct. 2004 à 20:27
0
Utile
Ok

Déclaration

private OleDbCommand BaseCom = new OleDbCommand();
private OleDbDataReader BaseRe;

private void initialisation()
{BaseCom.Connection new OleDbConnection("Provider Microsoft.Jet.OLEDB.4.0; Data Source=f:\\Serveur\\Data.mdb");
BaseCom.Connection.Open();
}

La modification du DV

case "00300"://l'utilisateur veut charger ces données
{
int id = Convert.ToInt32(Data.Substring(10,Data.Length-10));// on cherche l'id dans les données recues
BaseCom.Parameters.Clear ();BaseCom.CommandText "Select * From Membres where ID @ID";
BaseCom.Parameters.Add("@ID",System.Data.OleDb.OleDbType.Integer);
BaseCom.Parameters["@ID"].Value =id;
BaseRe = BaseCom.ExecuteReader();
BaseRe.Read();// on lui envoie les trucs qu'ils cherche
string envoi =BaseRe["Prénom"].ToString().Length.ToString().PadLeft(3,'0') + BaseRe["Prénom"].ToString() + BaseRe["DV"].ToString().Length.ToString().PadLeft(3,'0') + BaseRe["DV"].ToString() + BaseRe["DI"].ToString().Length.ToString().PadLeft(3,'0') + BaseRe["DI"].ToString() + LireFichier("F:\\Serveur\\Avatar\" + id.ToString() +BaseRe["AvEx"].ToString()) +BaseRe["AvEx"].ToString() ;
Envoyer(i,"00300",envoi);
BaseRe.Close();
BaseCom.Parameters.Clear ();BaseCom.CommandText "UPDATE Membres SET DV @DV WHERE (ID = @ID)"; //mettre à jour la date de la dernière visite
BaseCom.Parameters.Add("@ID",OleDbType.Integer);
BaseCom.Parameters.Add("@DV",OleDbType.Date );
BaseCom.Parameters["@ID"].Value = id;
BaseCom.Parameters["@DV"].Value = DateTime.Now;
MessageBox.Show(BaseCom.ExecuteNonQuery().ToString()); // pour que je teste
break;
}

c'est le code principal, car si je veux mettre tout, 400 ligne, car comme vous le savez, c'est un prog de serveur, alors y a beaucoup de trucs de connexion, mais le code en haut, et le principal pour les base de données.

merci pour votre aide

http://www.devportail.tk
Commenter la réponse de Fildomen

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.