J'essaie d'enregistrer le format de date et d'heure actuel à partir de C # et de le convertir en un format de date SQL Server afin yyyy-MM-dd HH:mm:ss
que je puisse l'utiliser pour ma UPDATE
requête.
C'était mon premier code:
DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd HH:mm:ss");
La sortie à la date est correcte, mais l'heure est toujours "12:00:00" donc j'ai changé mon code comme suit:
string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd") + " " +
myDateTime.TimeOfDay.ToString("HH:mm:ss");
Cela m'a donné cette erreur de compilation:
FormatException n'a pas été gérée
Et j'ai suggéré que je devais analyser. J'ai donc essayé de faire cela à mon code selon mes recherches ici dans StackOverflow:
string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd") + " " +
myDateTime.Parse.TimeOfDay.ToString("HH:mm:ss");
ou
string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd") + " " +
myDateTime.tryParse.TimeOfDay.ToString("HH:mm:ss");
Mais cela me dit que c'est une méthode qui n'est pas valable pour un contexte donné. J'ai essayé de chercher des solutions à mon problème et je suis bloqué depuis deux heures maintenant. Je suis encore un peu nouveau en C #, pouvez-vous m'aider s'il vous plaît?
DateTime
ou le stockez-vous sous forme de chaîne? AussiToString
surDate
impliquerait que le temps est toujours12:00:00
DATETIME
et vous pourriez alors éviter de faire tout cela en effectuant des va-et-vient vers et depuis une représentation sous forme de chaîne!datetime
serait un bon début. Mieux encore, pourquoi passez-vous au serveur l' heure actuelle - il a uneGETDATE()
fonction qui peut être appelée entièrement du côté du serveur.Réponses:
essayez ceci ci-dessous
la source
yyyy-MM-dd
l'heure du jour, et le nom "ISO8601" pour le formulaire où se trouve le caractère de séparation aT
. Mais oui, les deux formes se convertissent implicitement (et correctement) en undatetime
.L'utilisation du format standard datetime "s" garantira également la compatibilité d'internationalisation (MM / jj contre jj / MM):
Options complètes: (code: exemple de résultat)
Pris en charge dans .NET Framework: 4.6, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0
Référence:
DateTime.ToString
Méthodela source
La bonne réponse a déjà été donnée "utiliser les paramètres". Le formatage d'une date et sa transmission sous forme de chaîne à SQL-Server peuvent entraîner des erreurs car cela dépend des paramètres d'interprétation de la date côté serveur. En Europe, nous écrivons «1.12.2012» pour indiquer le 1er décembre 2012, alors que dans d'autres pays, cela peut être traité comme le 12 janvier.
Lorsque j'émets des déclarations directement dans SSMS, j'utilise le format
yyyymmdd
qui semble assez général. Je n'ai rencontré aucun problème sur les différentes installations sur lesquelles j'ai travaillé jusqu'à présent.Il existe un autre format rarement utilisé, qui est un peu bizarre mais qui fonctionne pour toutes les versions:
sera de retour le premier octobre 2013.
sera de retour le 1er octobre à 13:45:01
Je conseille vivement d'utiliser des paramètres et de ne jamais formater votre propre code SQL en collant ensemble des fragments d'instructions formatés maison. C'est une entrée pour l'injection SQL et les erreurs étranges (le formatage d'une valeur flottante est un autre problème potentiel)
la source
Votre premier code fonctionnera en faisant cela
la source
Votre problème est dans la propriété "Date" qui tronque
DateTime
à date uniquement. Vous pouvez mettre la conversion comme ceci:la source
La réponse que je recherchais était:
J'ai également appris que vous pouvez le faire de cette façon:
où myCountryDateFormat peut être modifié pour répondre au changement en fonction des besoins.
Veuillez noter que le tag "Cette question peut déjà avoir une réponse ici:" n'a pas réellement répondu à la question car comme vous pouvez le voir, il a utilisé un ".Date" au lieu de l'omettre. C'est assez déroutant pour les nouveaux programmeurs de .NET
la source
si vous souhaitez stocker la date actuelle dans le tableau afin que vous puissiez utiliser
ou passez cette fonction en paramètre
par exemple. 'update tblname set curdate = GETDATE () où colname = 123'
la source
Pourquoi ne pas ignorer complètement la chaîne:
la source
Votre problème est dans la
Date
propriété qui tronqueDateTime
à date uniquement. Vous pouvez mettre la conversion comme ceci:la source
Utilisons la classe SqlDateTime intégrée
Mais encore besoin de vérifier les valeurs nulles. Cela lèvera une exception de débordement
SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM.
la source
Une autre solution pour passer DateTime de C # à SQL Server, quels que soient les paramètres de langue de SQL Server
supposé que vos paramètres régionaux affichent la date au format jj.MM.aaaa (norme allemande `` 104 '') puis
transmet la variable datetime C # à la variable de type Date de SQL Server, en tenant compte du mappage selon les règles «104». La date du serveur SQL devient aaaa-MM-jj
Si vos paramètres régionaux affichent la date et l'heure différemment, utilisez la correspondance appropriée de la table de conversion SQL Server
en savoir plus sur les règles: https://www.techonthenet.com/sql_server/functions/convert.php
la source
Je pense que le problème était l'absence de deux guillemets simples.
Voici le sql que je lance sur le MSSMS:
Comme vous pouvez le voir, il y a deux guillemets simples, vos codes doivent donc être:
Utilisez des guillemets simples pour chaque chaîne dans MSSQL ou même dans MySQL. J'espère que ça aide.
la source
seulement vous mettez "T" + DateTime.Now.ToLongTimeString () + '2015-02-23'
la source
Si vous souhaitez mettre à jour une table avec cette dateTime, vous pouvez utiliser votre chaîne SQL comme cet exemple:
la source
"
.la source