Transformer TimeSpan(ASP.Net C#) a Timestamp(SQL Server) ???????

Signaler
Messages postés
33
Date d'inscription
samedi 8 mars 2008
Statut
Membre
Dernière intervention
23 janvier 2012
-
Messages postés
33
Date d'inscription
samedi 8 mars 2008
Statut
Membre
Dernière intervention
23 janvier 2012
-
Salut,

J’ai une variable de type «TimeSpan »
dans une page ASP.Net (code C#)  ou je
stocke la différence entre l’heure de sortie et l’heure d’entrée comme :



 


DateTime dt ;





DateTime
dt_E;






 

...recuperation
de dt et dt_E





//dt => 13/04/08
19:00:01





//dt_E => 13/04/08
17:00:00






 

TimeSpan
ddddddd = dt.TimeOfDay - dt_E.TimeOfDay;




//resultat de ddddddd est :
02:00:00 // signifie 2h travaillée par jour



 

Comment stocker la valeur 02 :00 :00
ds <st1:personname productid="la BD" w:st="on">la BD</st1:personname> ?


Car  en voulant faire un Update d’une Table pour insérer
cette variable (TimeSpan) dans un champ de type « TimeStamp » ça ne
marche pas :


Est ce qu’il existe un autre type
dans SQL Server 2005 qui ressemble au type « TimeSpan » de Visual
Studio 2005 ?


Comment je pourrai faire pour insérer
des valeurs TimeSpan ds <st1:personname productid="la BD" w:st="on">la BD</st1:personname> ???????



 Et pouvoir faire la somme des heures, min et
sec travaillées par jour ???????
A voir également:

8 réponses

Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
bonjour,

comment execute ton sql ?

si tu utilises une commande paramètre, alors en mettant le type du paramètre à timestamp cela devrait fonctionner.
Sinon, indique nous le message d'erreur, car "marche pas" c'est pas très explicite.

<hr />Cyril - MVP ASP.net - MCPD ASP.net & MCTS SQL - Consultant indépendant
Messages postés
33
Date d'inscription
samedi 8 mars 2008
Statut
Membre
Dernière intervention
23 janvier 2012

Merci pour ta réponse mais ca ne marche tjs pas

//-_-_-_-_-_

… alors en mettant le type du
paramètre à timestamp cela devrait fonctionner.

mais je ne trouve pas dans VS après un Convert
le type timestamp de SQLServer



rr.Subtract(); ? //j’ai meme
essaye la fonction Subtract mais cot works ?





Convert
.ToDateTime… ?




//-_-_-_-_-_

Actuellement  Je fais :



TimeSpan
ddddddd = dt.TimeOfDay - dt_E.TimeOfDay;






 




//Apres j’essaye
de convertir la variable ddddddd en String as :






 

String
diff_String = "";






      diff_String = Convert.ToString(ddddddd);






     
MessageBox.Show("try again"+diff_String); //ok affichage de 02:00:00




//et puis j essaye de faire :




 

chaine = WebConfigurationManager.ConnectionStrings["Gestion_RH_HopitalConnectionString"].ToString();






       
SqlConnection
Con_maj = newSqlConnection(chaine);






       

Con_maj.Open();








       
String
myQuery_maj = "Update Pointage set
difference_heure_S_et_E = " + diff_String + " "; //where id_pointage=
"+les_id_pointage[i]+" ";






       
SqlCommand
com_maj = newSqlCommand(myQuery_maj,
Con_maj);






  
try







   {   






       
    com_maj.ExecuteNonQuery();






      
     
MessageBox.Show("\n (maj) ok ");






    }catch (Exception ee) { ee.ToString(); } //Syntaxe incorrecte vers ':'.






 


Avant j’ai rendu le type du champ
: difference_heure_S_et_E varchar(10)
(j’ai enlevé TimeStamp) è et ça ne marche tjs pas mon Update ???????


Il entre dans try et ds catch il
m’affiche :  Syntaxe incorrecte vers
‘ :’ .


Si on a un champ de type varchar(10)
ds l’SQL Server est qu’on peut mettre dedans une variable string comme 02 :00 :00  (Pourquoi il n’accepte pas les deux points ?)



 





 
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
Si tu relis mon message, je parle de requête paramétré ...
Ce que tu fais c'est plus de la bidouille que du vrai code :-)

<hr />Cyril - MVP ASP.net - MCPD ASP.net & MCTS SQL - Consultant indépendant
Messages postés
33
Date d'inscription
samedi 8 mars 2008
Statut
Membre
Dernière intervention
23 janvier 2012

 Salut,




Mon but et de faire un programme
qui calculer le nombre d’heures travaillées par chaque salarié par jour.


Et pour cela j’ai calculé la différence
entre heure de sortie et celle d’entrée ; le résultat je le stocke dans une
variable TimeSpan ;


J’essaye ensuite de stocker cette
différence de temps (travaillé) dans <st1:personname productid="la BD" w:st="on">la
BD</st1:personname> mais je ne sais pas vraiment quel type de champ je dois
choisir pour réussir l’Update.


Peut être que si tu m’aide à
trouver une solution pour mon problème j’effacerai mon bad code comme tu dis (mais
c’est juste des tests) ...
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
Bonjour,

je t'ai donné une piste avec les requetes paramétrées, à toi d'exploiter cette piste, n'est-ce pas le but d'un forum ?http://www.google.com/search?hl=fr&rls=com.microsoft%3Aen-US&q=requete+param%C3%A9tr%C3%A9e+C%23+sql&lr=

<hr />Cyril - MVP ASP.net - MCPD ASP.net & MCTS SQL - Consultant indépendant
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
92
Salut,

Le type timestamp de SQL Server n'est pas du tout prévu pour stocker une durée : http://msdn.microsoft.com/fr-fr/library/ms182776.aspx
Dans ton cas ça serait plutôt datetime ou même une valeur numérique.

/*
coq
MVP Visual C#
CoqBlog
*/
Messages postés
33
Date d'inscription
samedi 8 mars 2008
Statut
Membre
Dernière intervention
23 janvier 2012

    Salut Cyril,


Yes , you’re right,

Merci bcp. Pour le lien du site :
tres interessant super .

C’est bon mon probleme est resolu


//call fct1 :

        MessageBox.Show("Le nb.d'heures travaillees / jour:" +
Get_Sum_Time_By_Day(1, Convert.ToDateTime("06/07/2008 00:00:00")).ToLongTimeString()
);  //"06/07/2008")

 //Call fct2:

   

  GroupBy_Day(1);

   
//_______________________________________La
fct (1) ____________________________

   
publicDateTime
Get_Sum_Time_By_Day(int id_pers, DateTime date_jour)

    {

         DateTime
Resultat = newDateTime(DateTime.Now.Year,DateTime.Now.Month,DateTime.Now.Day,0,0,0);

 

   chaine = WebConfigurationManager.ConnectionStrings["Gestion_RH_HopitalConnectionString"].ToString();

         SqlConnection
ConS = newSqlConnection(chaine);

         ConS.Open();

         String
myselect_diff = "Select difference_heure_SE
from Pointage where id_personne" + id_pers + " and date_jour '" +
date_jour.ToShortDateString() +"' ";

         SqlCommand
com_Diff = newSqlCommand(myselect_diff,
ConS);

         SqlDataReader
RD_Diff = com_Diff.ExecuteReader();

 

        if
(RD_Diff.HasRows)

         {

             while
(RD_Diff.Read())

             {

                 //if
(!RD_Diff.IsDBNull(0))

                 DateTime dt = RD_Diff.GetDateTime(0); //0 est le champ de difference SE

                 Resultat=Resultat.AddHours(dt.Hour);

                 Resultat =
Resultat.AddMinutes(dt.Minute);

                 Resultat =
Resultat.AddSeconds(dt.Second);

             }

         }

         ConS.Close();

   return Resultat; //But de cette fct est
de retourner la somme des heures S et E (par jour par personne)

   

   
} //Fin fct Get_Sum

   

    //__________________________________fct
(2) _________________________________ 
Group By Day

 

    publicvoid GroupBy_Day(int
id_pers)

    {

           chaine = WebConfigurationManager.ConnectionStrings["Gestion_RH_HopitalConnectionString"].ToString();

            SqlConnection
ConGroupBy = newSqlConnection(chaine);

            ConGroupBy.Open();   

            //Recuperer
les Jours

            String
myselect_Gp = "Select
[id_personne],[date_jour],[Le_jour] from 
[Gestion_RH_Hopital].[dbo].[Pointage] where [id_personne] = "+id_pers+" Group by [date_jour],[id_personne],[Le_jour]";

            SqlCommand
com_Gp = newSqlCommand(myselect_Gp,
ConGroupBy);

            SqlDataReader
RD_Gp = com_Gp.ExecuteReader();

 

            int
nom;

            String
jour;

        

            if
(RD_Gp.HasRows)

             {

                    while
(RD_Gp.Read())

                    {

                          
nom = Convert.ToInt32(RD_Gp.GetInt32(0));

                          
jour = RD_Gp.GetString(1);

                          
DateTime dtt = Get_Sum_Time_By_Day(nom, Convert.ToDateTime(jour + "
00:00:00") );

                                                    

                          
MessageBox.Show("dtt
" + dtt.ToLongTimeString() );

                          
MessageBox.Show("Dans le Jour : " + jour + "Res. :"+ Get_Sum_Time_By_Day(nom, Convert.ToDateTime(jour+"
00:00:00")).ToLongTimeString());

  

                          
//fct. pr. une requete => affichage ds une GridView:

                           //Affichage de trois colonne (1 : ip_personne

                                                      // 2 : date_jour

                                                     
// 3 : Le nb d'heures travaillees )

 

                     //???????

                          
/*

                          
SqlDataAdapter sd =
new SqlDataAdapter("select * from Pointage", ConGroupBy);
//???????                    

                          
DataSet ds = new
DataSet();

                          
sd.Fill(ds,"Pointage");

                          
DataGrid1.DataSource
= ds.Tables["Pointage"].DefaultView;

                          
DataGrid1.DataBind();

                          
*/

                    }//Fin
While

 

            } //Fin
if

   
} //Fin fct(2)

 

Now reste a trouver
comment affecter les 2 valeurs affichées dans le MessageBox de la fct2 as :

(  MessageBox.Show("Dans le Jour : " + jour + "Res. :"+ Get_Sum_Time_By_Day(nom, Convert.ToDateTime(jour+"
00:00:00")).ToLongTimeString());

)

dans un tableau de 3 colonnes (id_personne,
date_jour et nb d’heure_job_day) ou utiliser une datagrid manuellement ou … ?

help pls.
Messages postés
33
Date d'inscription
samedi 8 mars 2008
Statut
Membre
Dernière intervention
23 janvier 2012

Salut ,


Merci pour le lien de TimeStamp , ok :

TimeStamp de SQL Server represente les nbs binaires ...(pas de Datetime or Time )

So, j'ai rendu mon champ difference_entre_heure_sotrie_entree un champ Datetime

et ca facilite bcp la tache en employant les fcts specifiques de Datetime (as . toTimeofDay ...)

J'ai finalement utilisé dateTime pour stocker la durée et ca marche tres bien merci


Regards.