web-dev-qa-db-fra.com

Format DateTime au format SQL en utilisant C #

J'essaie d'enregistrer le format date/heure actuel de C # et de le convertir en un format de date SQL Server comme suit: yyyy-MM-dd HH:mm:ss afin de pouvoir l'utiliser pour ma requête UPDATE.

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" alors 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 non gérée

Et suggéré que je dois analyser. J'ai donc essayé de faire cela dans 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 valide pour un contexte donné. J'ai essayé de chercher des solutions à mon problème et cela fait deux heures que je suis coincé. Je suis encore un peu nouveau en C #, pouvez-vous m'aider s'il vous plaît?

83
Ace Caserya

essayez ceci ci-dessous 

DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss.fff");
162

L'utilisation du format de date/heure standard "s" garantira également la compatibilité avec l'internationalisation (MM/jj et jj/MM):

myDateTime.ToString("s");

=> 2013-12-31T00:00:00

Options complètes: (code: exemple de résultat)

d: 6/15/2008 
D: Sunday, June 15, 2008 
f: Sunday, June 15, 2008 9:15 PM 
F: Sunday, June 15, 2008 9:15:07 PM 
g: 6/15/2008 9:15 PM 
G: 6/15/2008 9:15:07 PM 
m: June 15 
o: 2008-06-15T21:15:07.0000000 
R: Sun, 15 Jun 2008 21:15:07 GMT 
s: 2008-06-15T21:15:07 
t: 9:15 PM 
T: 9:15:07 PM 
u: 2008-06-15 21:15:07Z 
U: Monday, June 16, 2008 4:15:07 AM 
y: June, 2008 

'h:mm:ss.ff t': 9:15:07.00 P 
'd MMM yyyy': 15 Jun 2008 
'HH:mm:ss.f': 21:15:07.0 
'dd MMM HH:mm:ss': 15 Jun 21:15:07 
'\Mon\t\h\: M': Month: 6 
'HH:mm:ss.ffffzzz': 21:15:07.0000-07:00

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 Method

35
InActive

La réponse correcte était déjà donnée "paramètres d'utilisation". Formater une date et la transmettre sous forme de chaîne à SQL-Server peut 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 pourrait être traité comme le 12 janvier.

Lorsque j'émets des déclarations directement dans SSMS, j'utilise le format yyyymmdd qui semble être 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é, ce qui est un peu bizarre mais fonctionne pour toutes les versions:

select { d '2013-10-01' }

sera de retour le premier octobre 2013. 

select { ts '2013-10-01 13:45:01' }

reviendra le 1er octobre, 13h45:01

Je vous conseille vivement d'utiliser des paramètres et jamais de formater votre propre code SQL en collant ensemble des fragments d'instructions formatés d'origine locale. C'est une entrée d'injection SQL et d'erreurs étranges (le formatage d'une valeur flottante est un autre problème potentiel)

6
alzaimar

Votre premier code fonctionnera en faisant cela

DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss"); //Remove myDateTime.Date part 
3
Rajeev Kumar

Votre problème est dans la propriété "Date" qui tronque DateTime à la date seulement . Vous pouvez mettre la conversion comme ceci:

DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss"); // <- No Date.ToString()!
3
Dmitry Bychenko

La réponse que je cherchais était:

DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss");

J'ai aussi appris que vous pouvez le faire de cette façon:

DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.ToString(myCountryDateFormat);

myCountryDateFormat peut être modifié pour répondre aux changements en fonction des besoins.

Veuillez noter que la balise "Cette question a peut-être déjà une réponse ici:" n'a pas réellement répondu à la question car, comme vous pouvez le voir, elle utilisait un ". Date" au lieu de l'omettre. C'est assez déroutant pour les nouveaux programmeurs .NET

2
Ace Caserya

Pourquoi ne pas sauter la chaîne complètement:

SqlDateTime myDateTime = DateTime.Now;
1
Steve D

Une autre solution pour passer DateTime de C # à SQL Server, quels que soient les paramètres de langue de SQL Server

soi-disant que vos paramètres régionaux affichent la date sous la forme jj.mm.yyyy (norme allemande '104'), puis 

DateTime myDateTime = DateTime.Now;
string sqlServerDate ="CONVERT("date,'"+myDateTime+"',104)"; 

transmet la variable datetime C # à la variable de type Date du serveur SQL, en considérant le mappage selon les règles "104". La date du serveur SQL obtient aaaa-MM-jj

Si vos paramètres régionaux affichent différemment la date et l'heure, utilisez la correspondance appropriée dans la table SQL Server CONVERT.

en savoir plus sur Règles: https://www.techonthenet.com/sql_server/functions/convert.php

0
George

Votre problème réside dans la propriété Date qui tronque DateTime uniquement à ce jour. Vous pouvez mettre la conversion comme ceci:

DateTime myDateTime = DateTime.Now;

string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss");
0
nanthakumar

Je pense que le problème était les deux guillemets simples manquants.

C'est le SQL que je lance au MSSMS:

WHERE checktime >= '2019-01-24 15:01:36.000' AND checktime <= '2019-01-25 16:01:36.000'

Comme vous pouvez le constater, il y a deux guillemets simples, vos codes doivent donc être:

string sqlFormattedDate = "'" + myDateTime.Date.ToString("yyyy-MM-dd") + " " + myDateTime.TimeOfDay.ToString("HH:mm:ss") + "'";

Utilisez des guillemets simples pour chaque chaîne dans MSSQL ou même dans MySQL. J'espère que ça aide.

0
Joshua Dawi Abejero