Requete update ne fonctionne pas [Résolu]

Messages postés
6
Date d'inscription
mardi 10 juillet 2007
Statut
Membre
Dernière intervention
9 août 2011
- - Dernière réponse : krimog
Messages postés
1863
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
- 23 août 2011 à 09:21
'ai réalisé une requête SQL avec la méthode INSERT INTO en utilisant un combo avec un élément de données Date. D'ou elle a été effectué avec succès. Mais quand j'ai utilisé une requete Update de combo d'un élément de données Date, elle m'affiche une erreur: ERROR [22007] [Simba][SimbaEngine ODBC Driver]Invalid date, time or timestamp value.
>
>Voici le code:
>private void btn_Importer_Click(object sender, EventArgs e)
> {
> OdbcConnection conODBC = new OdbcConnection("DSN=" + dsn.ToString() +
> ";UID=" + login.ToString() +
> ";PWD=" + password.ToString());
>
> SqlConnection conExpress = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\dbHistorique.mdf;Integrated Security=True;User Instance=True;");
>
> //try
> //{
> conODBC.Open();
> string req = "SELECT F_SAL.SA_MATRICULE, F_SAL.SA_NOM, F_SAL.SA_PRENOM, F_SAL.SA_CIVILITE, " +
> "F_SAL.SA_DATEDEPAIE, F_SAL.SA_DATEDECLOTURE " +
> "FROM F_SAL";
> OdbcDataAdapter da = new OdbcDataAdapter(req, conODBC);
> DataSet ds = new DataSet();
> da.Fill(ds, "F_SAL");
>
> conExpress.Open();
> string req2 = "SELECT * FROM Salarie";
> SqlDataAdapter da2 = new SqlDataAdapter(req2, conExpress);
> DataSet ds2 = new DataSet();
> da2.Fill(ds2, "Salarie");
>
> if (ds.Tables["F_SAL"].Rows.Count > 0 || ds2.Tables["Salarie"].Rows.Count > 0)
> {
> for (int i = 0; i < ds.Tables["F_SAL"].Rows.Count; i++)
> {
> bool matched = false;
> for (int j = 0; j < ds2.Tables["Salarie"].Rows.Count; j++)
> {
> if (ds.Tables["F_SAL"].Rows[i]["SA_DATEDECLOTURE"].ToString() != ds2.Tables["Salarie"].Rows[j]["DateDeCloture"].ToString())
> {
> matched = false;
> MessageBox.Show("Les données ne sont pas identiques");
> MessageBox.Show(ds.Tables["F_SAL"].Rows[i]["SA_DATEDECLOTURE"].ToString() + " // " + ds2.Tables["Salarie"].Rows[i]["DateDeCloture"].ToString());
>
> try
> {
> //[3] Insertion de l'ancienne valeur dans la table Test
> MessageBox.Show("Requete d'enregistrement dans la table [Test]");
> string StrInsert = @"INSERT INTO TEST(Matricules,ValeurDeCellule) VALUES ('" + ds2.Tables["Salarie"].Rows[i]["Matricule"].ToString() + "','" + combo_DateCloturePaie.Text +"')";
> SqlCommand cmdInsert = new SqlCommand(StrInsert, conExpress);
> MessageBox.Show("Requete: " + StrInsert);
> cmdInsert.ExecuteNonQuery();
> MessageBox.Show("Requete bien insérée.");
> }
> finally { if (conExpress != null) { conExpress.Close(); } }
>
> //[4] Modification de la ligne de la colonne de la nouvelle valeur de Date de cloture dans la table ODBC
> MessageBox.Show("Requete de modification dans la table ODBC");
>
>
> string StrUpdate @"UPDATE F_SAL SET SA_DATEDECLOTURE '" + combo_DateCloturePaie.Text + "' WHERE SA_MATRICULE= '" + ds.Tables["F_SAL"].Rows[i]["SA_MATRICULE"].ToString() + "'"; //???
> //string StrUpdate @"UPDATE F_SAL SET SA_DATEDECLOTURE '" + combo_DateCloturePaie.Text + "' WHERE SA_MATRICULE= '" + ds.Tables["F_SAL"].Rows[i]["SA_MATRICULE"].ToString() + "'"; //???
> ////////////////////////////////
>
> OdbcCommand cmdUpdate = new OdbcCommand(StrUpdate, conODBC);
> MessageBox.Show("Requete: " + StrUpdate);
>
>
> cmdUpdate.ExecuteNonQuery();
> MessageBox.Show("Requete bien modifiée.");
>
> MessageBox.Show("Import effectué avec succès.", "Information", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Information);
> }
> }
> if (matched == true)
> {
> MessageBox.Show("Les données sont identiques");
> }
> }
> }
> conODBC.Close();
> //}
> //catch (Exception en)
> //{
> // conODBC.Close();
> // MessageBox.Show("Erreur d'import: " + en.Message.ToString(), "Information", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
> //}
> }
> }
>
>
>Merci de m'aider à cette requete Update.
Afficher la suite 

3 réponses

Meilleure réponse
Messages postés
1863
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
28
3
Merci
Bonjour

L'erreur me semble très explicite : "Invalid date, time or timestamp value."
En gros, il ne s'attend pas à recevoir une date au format que tu lui donnes.

Deux solutions :
- Utiliser des requêtes paramétrées et envoyer un DateTime
- Reformater la date avec le format attendu

Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 195 internautes nous ont dit merci ce mois-ci

Commenter la réponse de krimog
Messages postés
5
Date d'inscription
samedi 18 décembre 2010
Statut
Membre
Dernière intervention
15 décembre 2011
0
Merci
SqlConnection conExpress = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\dbHistorique.mdf;Integrated Security=True;User Instance=True;");


erreur car t'a pas specifier le repertoire de ta base ICI "DataDirectory" tu doit la remplacer par exemple : "c:\users\admin\you.mdf"

good like

devplloper
Commenter la réponse de guendouzbachir
Messages postés
1863
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
28
0
Merci
@Guendouzbachir : |DataDirectory| correspond au répertoire de l'application. Le framework le remplace tout seul.
De plus, si l'erreur venait d'ici, le problème aurait été la connexion à la base de données et non l'exécution de la requête.

Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -
Commenter la réponse de krimog