Insertion de date dans une base access [Résolu]

Signaler
Messages postés
475
Date d'inscription
jeudi 19 juin 2003
Statut
Membre
Dernière intervention
3 novembre 2008
-
Messages postés
475
Date d'inscription
jeudi 19 juin 2003
Statut
Membre
Dernière intervention
3 novembre 2008
-
Salut,
j'ai un formulaire en asp.net qui doit inscrire les nouveaux membres.
mon probleme est avec la base de donnée quand j'essaie d'insérer une date.
voici un extrait du code:
bithday est de type DateTime, et les autres variables sont des string

string cmdString = "INSERT INTO members ([username], [password], [e-mail], [birthday]) VALUES (@username,@password,@mail,@birthday)";

//la connection est correcte
OleDbConnection conn =
new OleDbConnection(connString);

OleDbCommand cmd =
new OleDbCommand(cmdString, conn);
cmd.Parameters.Add("@username", username);
cmd.Parameters.Add("@password", password);
cmd.Parameters.Add("@mail", email);
cmd.Parameters.Add("@birthday", birthday);

Le problème est avec la date. quand je la vire, tout marche bien
quand j'entre:
string cmdString = "INSERT INTO members ([username], [password], [e-mail], [birthday]) VALUES (@username,@password,@mail,#2006-01-02 22:45:00#)";

ca marche bien

mais quand j'essaie d'utiliser les paramètres, ca marche plus :(
j'ai essayé plein de combinaison mais ca marche pas

etk, merci d avance

p.s. le champ birthday est Date/Time dans une base Access qui n'a aucun format ni aucun Input Mask

@++

2 réponses

Messages postés
475
Date d'inscription
jeudi 19 juin 2003
Statut
Membre
Dernière intervention
3 novembre 2008

Salut,
J'avais essayé de spécifier le type de paramètres. D'ailleurs, j'ai essayé tout les combinaisons possibles
Cependant, j'ai fini par trouver la solution (ou une solution)
Quand je faisais DateTime.Now pour la date d'anniversaire, le résultat était une date avec une heure précise aux millisecondes. La base de donnée access accepte la date avec une heure qui s'arrete aux secondes (ex.: 2006-06-07 15:45:31). Il y a donc deux solutions:
1 - declarer la date soit meme : DateTime dt = new DateTime(1987,12,17,...);
2 - utiliser la fonction suivante qui rend la date "valide" pour Access


private DateTime GetFormattedDate(DateTime datetime)
{

return DateTime.Parse(datetime.ToString(), System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat);
}

J'espère que cela aidera certains.
voici l'extrait de mon code final :

string cmdString = "INSERT INTO members ([username], [password], [e-mail], [birthday]) VALUES (@username,@password,@mail,@birthday)";

//la connection est correcte
OleDbConnection conn = new OleDbConnection(connString);

OleDbCommand cmd = new OleDbCommand(cmdString, conn);
cmd.Parameters.Add("@username", username);
cmd.Parameters.Add("@password", password);
cmd.Parameters.Add("@mail", email);
cmd.Parameters.Add("@birthday", GetFormattedDate(
birthday));

@++
Messages postés
1648
Date d'inscription
samedi 6 novembre 2004
Statut
Modérateur
Dernière intervention
28 avril 2011
2
Salut,

essaye de préciser le format des données du parameter :

OleDbParamater parametre = new OleDbParameter("@birthday",System.Data.OleDb.OleDbDataTypes.Date);
OleDbParameter.Value = birthday;
cmd.Parameters.Add(parametre);

Il y a dans OleDbDataType tous les types qui devrait pouvoir t'intéresser : Date, DBDate, DBTime ou DBTimeSpan Personnellement je dirais Date dans ton cas, mais je ne suis pas sûr...

Nurgle