формат datetime в формат SQL с использованием C#
Я пытаюсь сохранить текущий формат даты и времени из C# и преобразовать его в формат даты SQL Server, напримерyyyy-MM-dd HH:mm:ss
так что я могу использовать его для моего Update
запрос.
это был мой первый код:
DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd HH:mm:ss");
выход на дату в порядке, но время всегда "12: 00: 00", поэтому я изменил свой код на следующий:
string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd") + " " +
myDateTime.TimeOfDay.ToString("HH:mm:ss");
это дало мне ошибку компиляции "FormatException был необработан" и предложил мне нужно разобрать. Поэтому я попытался сделать это с моим кодом в соответствии с моими исследованиями вот в staackoverflow:
string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd") + " " +
myDateTime.Parse.TimeOfDay.ToString("HH:mm:ss");
или
string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd") + " " +
myDateTime.tryParse.TimeOfDay.ToString("HH:mm:ss");
но это дает мне это метод, который не является допустимым для данного контекста. Я попытался найти решения своей проблемы и в настоящее время застрял в течение двух часов. Я все еще немного нового в C#, вы можете помочь, пожалуйста?
11 ответов:
попробуйте это ниже
DateTime myDateTime = DateTime.Now; string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss.fff");
использование стандартного формата datetime " s " также обеспечит совместимость с интернационализацией (ММ / ДД против ДД / ММ):
myDateTime.ToString("s"); => 2013-12-31T00:00:00
полные Параметры: (код: пример результата)
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
поддерживается .Чистая рамки: 4.6, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0
Ссылка:DateTime.ToString
метод
правильный ответ уже был дан "параметров". Форматирование даты и передача ее в виде строки на SQL-сервер может привести к ошибкам, поскольку это зависит от настроек, как дата интерпретируется на стороне сервера. В Европе, мы пишем '1.12.2012, чтобы указать на 1 декабря 2012 года, в то время как в других странах это может рассматриваться как 12 января.
при выдаче инструкций непосредственно в SSMS я использую формат
yyyymmdd
, которые, кажется, быть достаточно общим. У меня не возникло никаких проблем над различными установками я работал до сих пор.есть еще один редко используемый формат, который немного странный, но работает для всех версий:
select { d '2013-10-01' }
вернется первого октября 2013 года.
select { ts '2013-10-01 13:45:01' }
вернется 1 октября, 1: 45: 01 PM
я настоятельно рекомендую использовать параметры и никогда отформатируйте свой собственный код SQL, вставив вместе фрагменты доморощенного форматированного оператора. Это запись для SQL инъекции и странно ошибки (форматирование значения с плавающей запятой-еще одна потенциальная проблема)
ваш первый код будет работать с этим
DateTime myDateTime = DateTime.Now; string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss"); //Remove myDateTime.Date part
ваша проблема заключается в свойстве "дата", которое усекает
DateTime
на сегодняшний день только. Вы можете поместить преобразование следующим образом:DateTime myDateTime = DateTime.Now; string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss"); // <- No Date.ToString()!
ответ, который я искал, было:
DateTime myDateTime = DateTime.Now; string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss");
Я также узнал, что вы можете сделать это так:
DateTime myDateTime = DateTime.Now; string sqlFormattedDate = myDateTime.ToString(myCountryDateFormat);
где myCountryDateFormat может быть изменен для удовлетворения изменения в зависимости от требования.
обратите внимание, что помеченный "этот вопрос может уже иметь ответ здесь:" фактически не ответил на вопрос, потому что, как вы можете видеть, он использовал ".Дата " вместо того, чтобы опустить его. Это довольно запутанно для новых программистов .NET
ваша проблема в
Date
свойство, которое усекаетDateTime
на сегодняшний день только. Вы можете поместить преобразование следующим образом:DateTime myDateTime = DateTime.Now; string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss");
Если вы хотите сохранить текущую дату в таблицу, так что вы можете использовать
GETDATE ();
или передать эту функцию в качестве параметр
например. 'update tblname set curdate=GETDATE () where colname=123'
Если вы хотите обновить таблицу с этим dateTime, вы можете использовать строку sql, как в этом примере:
int fieldId; DateTime myDateTime = DateTime.Now string sql = string.Format(@"UPDATE TableName SET DateFieldName='{0}' WHERE FieldID={1}, myDateTime.ToString("yyyy-MM-dd HH:mm:ss"), fieldId.ToString());