SQL Server 2005 против путаницы формата даты и времени ASP.net


0

Я нашел аналогичный вопрос о переполнении стека, но на самом деле я не ответил на вопрос, который у меня есть. Мне нужно убедиться, что мое приложение asp.net форматирует дату dd/mm/yyyy так же, как и мой SQL Server 2005.

Как проверить цвет даты (если это то, что она называется) на сервере совпадает как я запрограммировал свое приложение? Существуют ли конкретные настройки базы данных и настройки ОС? Является ли он специфичным для таблицы? Я не хочу переносить свои дни и месяцы.

спасибо

6

Когда вы получаете DateTime из базы данных, он должен быть в не культивируемых формате (например, объект DateTime, на основе количества тиков после определенной даты). Это происходит только тогда, когда вы преобразовываете это значение в строку, которая должна быть связана с культурой. В таких случаях вы можете использовать yourDateTimeValue.ToString ("dd/MM/yyyy", CultureInfo.InvariantCulture), чтобы убедиться, что информация отображается правильно.


0

** Остерегайтесь, потому что столбцы SQL DateTime не имеют значения NULL, а их минимальное значение равно 1/1/1753, тогда как .net DateTimes не являются нулевыми с минимальными значениями 1/1/0001. **

Если вы извлекаете данные из реального столбца DateTime, по умолчанию он всегда будет в том же стандартном формате. Чтобы сохранить данные в столбце, вы можете указать SqlDbType.DateTime в своем параметре.

я разорвал это прочь http://bytes.com/forum/thread767920.html:

com.Parameters.Add ("@ adate", SqlDbType.DateTime) .Value = DateTime.Now;


0

Ну, если вы держите поля datetime в БД, вы не должны беспокоиться об этом.

Пока вы сохраняете даты в приложении строго типизированными (переменные DateTime) и отправляете даты с помощью подготовленных операторов с помощью DBParameter/SqlParameter, ваша БД будет принимать их как есть.

Если использовать строки для хранения в коде даты, некоторые слепки обеспечит вам послать правильные значения:

string sqlCmd = @"SELECT * 
    FROM MyTable 
    WHERE MyDateField = CONVERT(datetime, '{0}', 101)"; 

// assuming myDateString is a string with a date in the local format 
sqlCmd = string.Format(sqlCmd, 
    Convert.ToDateTime(myDateString).ToString("yyyyMMdd")); 

(код некрасиво, но, надеюсь, он получает через точку)


2

Я верю, что если вы используете SqlParameters, ADO.NET позаботится об остальном, и вам не придется беспокоиться об этом. Кроме того, это хорошо для защиты от атак SQL Injection тоже! :)


0

Как уже упоминалось, вы должны быть в порядке, сохраняя данные в культурном отношении. Я бы порекомендовал вам, что вы сохраняете все свое время в качестве стандартного времени UTC. В SQL Server 2005 и старше нет возможности хранить информацию о часовом поясе, но если все хранится в универсальное время, вы должны быть в порядке, потому что время может быть преобразовано в локальное время позже.

В SQL Server 2008 есть некоторые типы данных, которые знают о часовых поясах, и если вы используете .NET 3.5, есть инструменты, помогающие в обработке/конверсии часовых поясов.

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