it-roy-ru.com

Формат 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 был не обработан

И предложил мне разобрать. Поэтому я попытался сделать это с моим кодом в соответствии с моим исследованием здесь, в 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 #, не могли бы вы помочь мне, пожалуйста?

88
Ace Caserya

попробуйте это ниже

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

Использование стандартного формата даты и времени "s" также обеспечит совместимость с интернационализацией (MM/dd против dd/MM):

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

Поддерживается в .NET Framework: 4.6, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0
Ссылка: DateTime.ToString Method

38
InActive

Правильный ответ уже был дан "использовать параметры". Форматирование даты и ее передача в виде строки в SQL-Server может привести к ошибкам, так как это зависит от настроек интерпретации даты на стороне сервера. В Европе мы пишем "1.12.2012" для обозначения 1 декабря 2012 года, тогда как в других странах это может рассматриваться как 12 января.

При выдаче выписок непосредственно в SSMS я использую формат yyyymmdd, который кажется довольно общим. Я не сталкивался с какими-либо проблемами на различных установках, над которыми работал до сих пор.

Есть еще один редко используемый формат, который немного странный, но работает для всех версий:

select { d '2013-10-01' }

вернется первого октября 2013 года.

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

вернется 1 октября, 13:45:01

Я настоятельно рекомендую использовать параметры и никогда форматировать ваш собственный код SQL, вставляя вместе отформатированные фрагменты операторов. Это запись для SQL-инъекции и странных ошибок (другая потенциальная проблема - форматирование значения с плавающей запятой).

6
alzaimar

Ваш первый код будет работать, делая это

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

Ваша проблема в свойстве "Date", которое усекает DateTime только до даты. Вы можете поместить преобразование так:

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

Ответ, который я искал, был:

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

Я также узнал, что вы можете сделать это следующим образом:

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

где myCountryDateFormat может быть изменено, чтобы соответствовать изменению в зависимости от требования.

Обратите внимание, что тег "Этот вопрос может уже иметь ответ здесь" фактически не ответил на вопрос, потому что, как вы можете видеть, он использовал ".Date" вместо того, чтобы пропустить его. Это довольно запутанно для новых программистов .NET

2
Ace Caserya

Почему бы вообще не пропустить строку:

SqlDateTime myDateTime = DateTime.Now;
1
Steve D

Другое решение для передачи DateTime из C # в SQL Server, независимо от языковых настроек SQL Server

предположительно, что ваши региональные настройки показывают дату как dd.MM.yyyy (немецкий стандарт '104') тогда

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

передает переменную datetime C # в переменную типа даты SQL Server, учитывая сопоставление согласно правилам "104". Дата сервера Sql получает гггг-ММ-дд

Если ваши региональные настройки по-разному отображают дату и время, используйте соответствующее сопоставление из таблицы преобразования SQL Server.

узнать больше о правилах: https://www.techonthenet.com/sql_server/functions/convert.php

0
George

если вы хотите сохранить текущую дату в таблице, чтобы вы могли использовать

Или передайте эту функцию как параметр

например. 'update table_name set curdate = GETDATE () где colname = 123'

0
Manohar Patil

Ваша проблема в свойстве Date, которое усекает DateTime только до даты. Вы можете поместить преобразование так:

DateTime myDateTime = DateTime.Now;

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

Я думаю, что проблема была в двух пропущенных одинарных кавычках.

Это SQL я запускаю в MSSMS:

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

Как видите, есть две одинарные кавычки, поэтому ваши коды должны быть:

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

Используйте одинарные кавычки для каждой строки в MSSQL или даже в MySQL. Надеюсь, это поможет.

0
Joshua Dawi Abejero