Je voudrais savoir comment on met une donnée de type TimeSpan sur une base de données MySQL
J'ai tenté d'utiliser un DATETIME ou un TIME mais sans succès
----31/01/2012 20:15:51 ----
Type: MySqlException
Source: MySql.Data
Message: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ':00:18.1290369 WHERE Name='test'' at line 1
Target: ReadPacket
Trace: à MySql.Data.MySqlClient.MySqlStream.ReadPacket()
à MySql.Data.MySqlClient.NativeDriver.GetResult(Int32& affectedRow, Int32& insertedId)
à MySql.Data.MySqlClient.Driver.GetResult(Int32 statementId, Int32& affectedRows, Int32& insertedId)
à MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId)
à MySql.Data.MySqlClient.MySqlDataReader.NextResult()
à MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)
à MySql.Data.MySqlClient.MySqlCommand.ExecuteReader()
à MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery()
à MCLawl.MySQL.executeQuery(String queryString, Boolean createDB) dans C:\Users\Nicolas\minecraft\MCLawlSource nouveau systeme\MCLawl\MySQL.cs:ligne 32
-------------------------
Je voudrais utiliser ça pour sauvegarder un temps de jeu sur un serveur.
Merci
nico69
"Tout devrait être rendu aussi simple que possible, mais pas plus." A.Einstein
Pour faire simple, le totalTimePlayed doit contenir l'heure d'arrivée du joueur si il aurais jouer toutes les heures d'un coup.
Ensuite j'ai plus qu'a enlever la date actuelle pour avoir le temps joueur total.
J’essaie d'utiliser cette méthode car elle n'utilise pas de puissance pour "compter"
Après il se peut que je me trompe sur toute la ligne
Aussi j'ai lu qu'un TIME ne peut contenir que 24H et je pence que je devrais stoker des temps de jeu beaucoup plus élevé
"Tout devrait être rendu aussi simple que possible, mais pas plus." A.Einstein
Tu envoie un DateTime dans ta requête. elle devrait donc être construite comme ceci :
", totalTimePlayed='" + DateTime.Now.Subtract(totalTimePlayed).ToString() + "'"//et le reste
(ajout de ' si c'Est pas clair )
Et puis bon... je comprend pas pourquoi tu envoie une date antérieure a un temps jouer... au lieu du temps jouer, directement :/, mais bon, pas mon problème
Citation : n!co69
Aussi j'ai lu qu'un TIME ne peut contenir que 24H et je pence que je devrais stoker des temps de jeu beaucoup plus élevé
Vous pouvez aussi utiliser l'une des syntaxes alternatives suivantes : HH:MM:SS.fraction, HH:MM:SS, HH:MM, D HH:MM:SS, D HH:MM, D HH ou SS. Ici, D peut prendre des valeurs entre 0 et 33.
----04/02/2012 10:52:03 ----
Type: MySqlException
Source: MySql.Data
Message: Incorrect time value: '00:00:24.2163851' for column 'totalTimePlayed' at row 918
Target: ReadPacket
Trace: à MySql.Data.MySqlClient.MySqlStream.ReadPacket()
à MySql.Data.MySqlClient.NativeDriver.GetResult(Int32& affectedRow, Int32& insertedId)
à MySql.Data.MySqlClient.Driver.GetResult(Int32 statementId, Int32& affectedRows, Int32& insertedId)
à MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId)
à MySql.Data.MySqlClient.MySqlDataReader.NextResult()
à MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)
à MySql.Data.MySqlClient.MySqlCommand.ExecuteReader()
à MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery()
à MCLawl.MySQL.executeQuery(String queryString, Boolean createDB) dans C:\Users\Nicolas\minecraft\MCLawlSource nouveau systeme\MCLawl\MySQL.cs:ligne 32
-------------------------
Le truc c'est de sauvegarder le temps joué (par exemple 8h) lorsque le joueur se déconnecte.
Lorsque il se reconnecte, on soustrais le temps joué précédemment a sa date de connexion.
Lorsque il se redéconnecte on recommence dans l'autre sens : on enlève la date d'arrivé moins le temps joué (définit a la connexion) a la date actuelle pour avoir le temps joué total.
En espérant avoir été plus clair
"Tout devrait être rendu aussi simple que possible, mais pas plus." A.Einstein
Tu envoie un DateTime dans ta requête. elle devrait donc être construite comme ceci :
", totalTimePlayed='" + DateTime.Now.Subtract(totalTimePlayed).ToString() + "'"//et le reste
Sacrilège !
On ne construit jamais une requête SQL en concaténant des strings.
n!co69 n'aurait pas eu de problème s'il avait utilisé correctement les paramètres de requête !
Si si, je sais Mais les mauvaises habitudes (aka norme de prog de ma compagnie faite par un analyste qui ne connais pas C# ...) sont restées et j'y pense pas rapidement
J'ai toujours utiliser mysql comme ceci et je n'ai jamais eu de problèmes (sauf pour ce timespan qui maintenant fonctionne bien)
Ne pas concaténer des string pour une requête mysql est t'il très important ou c'est juste une "méthode" a respecter ?
Faire des requêtes comme tu le fais est un énorme risque de sécurité, tout simplement. Et du travail de plus. Ça laisse la porte ouverte à du SQL Injection (entre-autres). Tu doit donc valider à la main toutes les variables, ce que fait déjà une requetes qui utilise les paramètres de requêtes.
Mais je ne stock pas de données "importantes" sur mysql.
De plus ces types de problèmes ne peuvent pas arriver car toutes les variables sont géré par le serveur.
Merci pour le conseil, ça me servira si j'utilise mysql pour des éléments plus important
"Tout devrait être rendu aussi simple que possible, mais pas plus." A.Einstein
Autant prendre les bonnes habitudes tout de suite, et ça simplifiera même l'écriture et la maintenance de tes requêtes.
TimeSpan mysql
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.