Вставка значений DateTime в базу данных?

#asp.net #sql #sql-server #datetime

#asp.net #sql #sql-сервер #datetime

Вопрос:

Кажется, что это должно быть действительно очевидно, но как я могу поместить объект DateTime в базу данных MSSQL? Когда я преобразую его в строку, он продолжает добавлять «-7:00» в конце для смещения часового пояса, и поэтому запрос не принимается. Как я могу это исправить?

Ответ №1:

Как вы пытаетесь вставить DateTime в базу данных? Если вы преобразуете его в строку для передачи в хранимую процедуру (плохая идея; лучше использовать SQL-тип date), тогда вам следует сначала преобразовать все DateTime объекты в UTC с помощью метода .net ToUniversalTime . После перехода в UTC у DateTime не будет смещения часового пояса.

Комментарии:

1. Хм … тогда, может быть, дело не в этом. Это то, что я получаю после использования ToUniversalTime : '2011-05-28T22:33:52.0549471Z' . Это правильное время, но оно все еще не принято в качестве datetime .

2. А, неважно — по-видимому, это допускает только 3 цифры точности. Спасибо. 1

Ответ №2:

Предполагая, что вы используете C #, я бы предложил следующее:

 SqlCommand cmd = new SqlCommand("INSERT INTO yourTable (dateTimeColumn) VALUES (@value)", connection);
cmd.Parameters.AddWithValue("@value", yourDateTimeObject);

cmd.ExecuteNonQuery();
  

Это сработает для вставки значения. Если нет, пожалуйста, опубликуйте свой код, чтобы показать, где ошибка, потому что это означает, что объект datetime, из которого вы получаете значение, неправильно передает данные.

Комментарии:

1. Я не могу использовать параметры в этом случае.

2. Выполнение inline будет работать в основном таким же образом. Просто посмотрите на свой вывод toString (), чтобы убедиться, что он выдает то, что вы хотите. Если вы хотите изменить это, либо на другой оператор «To», либо отформатируйте строку так, как вы этого хотите (или база данных ожидает этого).

3. @minitech Почему вы не можете использовать параметры?

4. @Neil: Я создаю библиотеку для правильного форматирования строк.