формат 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 76

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

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

SqlDateTime myDateTime = DateTime.Now;

ваша проблема в 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'

только вы ставите "T" +DateTime.Сейчас.ToLongTimeString()+ '2015-02-23'

Если вы хотите обновить таблицу с этим 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());