Я пытаюсь сохранить текущий формат даты и времени из 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 не было обработано
И предложил мне разобрать. Поэтому я попытался сделать это со своим кодом в соответствии с моими исследованиями здесь, в StackOverflow:
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 #, не могли бы вы мне помочь?
DateTime
или вы сохраняете его как строку? ТакжеToString
наDate
подразумевало бы , что время всегда12:00:00
DATETIME
и тогда вы можете избежать всех этих преобразований назад и вперед в строковое представление и обратно!datetime
было бы хорошим началом. Еще лучше, почему вы передаете серверу текущее время - у него естьGETDATE()
функция, которая может быть вызвана полностью на стороне сервера.Ответы:
попробуйте это ниже
источник
yyyy-MM-dd
от времени суток, и имя «ISO8601» для формы, где разделительный символ аT
. Но да, обе формы неявно (и правильно) конвертируются вdatetime
.Использование стандартного формата даты и времени «s» также обеспечит совместимость с интернационализацией (MM / dd по сравнению с dd / MM):
Полные параметры: (код: образец результата)
Поддерживается в .NET Framework: 4.6, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0
Ссылка:
DateTime.ToString
методисточник
myDateTime.ToString("o");
вместо этого миллисекунды и буквально описываются в документации как «Круговой шаблон даты / времени»."s"
описывается только как «Сортируемый шаблон даты и времени», поэтому я бы не предлагал использовать его для этого. См .: docs.microsoft.com/en-us/dotnet/standard/base-types/…Уже был дан правильный ответ «параметры использования». Форматирование даты и передача ее в виде строки SQL-серверу может привести к ошибкам, поскольку это зависит от настроек, как дата интерпретируется на стороне сервера. В Европе мы пишем «1.12.2012», чтобы обозначить 1 декабря 2012 года, тогда как в других странах это могло бы считаться 12 января.
При выдаче выписок непосредственно в SSMS я использую формат
yyyymmdd
который кажется довольно общим. У меня не было проблем с различными установками, над которыми я работал до сих пор.Есть еще один редко используемый формат, который немного странный, но работает для всех версий:
вернусь первого октября 2013 года.
вернется 1 октября, 13:45:01
Я настоятельно рекомендую использовать параметры и никогда не форматировать собственный код SQL путем склеивания фрагментов операторов в собственном формате. Это запись для SQL-инъекций и странных ошибок (форматирование значения с плавающей запятой - еще одна потенциальная проблема)
источник
Ваш первый код будет работать следующим образом
источник
Ваша проблема в свойстве «Дата», которое усекает
DateTime
только до даты. Вы могли бы преобразовать так:источник
если вы хотите сохранить текущую дату в таблице, чтобы вы могли использовать
или передайте эту функцию как параметр
например. 'update tblname set curdate = GETDATE (), где colname = 123'
источник
Ответ, который я искал, был:
Я также узнал, что это можно сделать так:
где myCountryDateFormat можно изменить в соответствии с требованиями.
Обратите внимание, что на этот вопрос с пометкой «Возможно, здесь уже есть ответ», на самом деле нет ответа на этот вопрос, потому что, как вы можете видеть, вместо его пропуска используется «.Дата». Это довольно сбивает с толку начинающих программистов .NET.
источник
Почему бы вообще не пропустить строку:
источник
Ваша проблема в том,
Date
что усекаетсяDateTime
только свойство . Вы могли бы преобразовать так:источник
Воспользуемся встроенным классом SqlDateTime
Но все же нужно проверить нулевые значения. Это вызовет исключение переполнения
SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM.
источник
Я думаю, проблема заключалась в отсутствии двух одинарных кавычек.
Это sql, который я запускаю в MSSMS:
Как видите, здесь две одинарные кавычки, поэтому ваши коды должны быть:
Используйте одинарные кавычки для каждой строки в MSSQL или даже в MySQL. Надеюсь, это поможет.
источник
только вы помещаете "T" + DateTime.Now.ToLongTimeString () + '2015-02-23'
источник
источник
Если вы хотите обновить таблицу с помощью этого DateTime, вы можете использовать свою строку SQL, как в этом примере:
источник
"
.Другое решение для передачи DateTime с C # на SQL Server, независимо от языковых настроек SQL Server.
предположительно, что ваши региональные настройки показывают дату как dd.MM.yyyy (немецкий стандарт '104'), тогда
передает переменную datetime C # в переменную типа Date в SQL Server с учетом сопоставления согласно правилам «104». Дата сервера sql получает гггг-мм-дд
Если в ваших региональных настройках DateTime отображается иначе, используйте соответствующее соответствие из таблицы преобразований SQL Server.
подробнее о правилах: https://www.techonthenet.com/sql_server/functions/convert.php
источник
ToString()
DateTime, который зависит от настройки культуры. Если машина, отправляющая эту команду SQL, использует другой параметр культуры, чем сервер SQL, сервер SQL может принять его за что-то еще. Не делай этого! См .: docs.microsoft.com/en-us/dotnet/api/…