SQL Server 2005 против ASP.net формат даты и времени путаница - PullRequest
0 голосов
/ 24 сентября 2008

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

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

спасибо

Ответы [ 5 ]

6 голосов
/ 24 сентября 2008

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

2 голосов
/ 24 сентября 2008

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

0 голосов
/ 21 октября 2008

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

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

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

0 голосов
/ 24 сентября 2008

Что ж, если вы храните поля даты и времени в БД, вам не стоит об этом беспокоиться.

Пока вы сохраняете даты в приложении строго типизированными (переменные 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"));

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

0 голосов
/ 24 сентября 2008

** Остерегайтесь, поскольку столбцы SQL DateTime не обнуляются и их минимальное значение равно 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;

...