Spec-Zone .ru
спецификации, руководства, описания, API

21.2.5.12. Обработка Даты и информации Времени в Соединителе/Сети

MySQL и языки.NET обрабатывают дату и информацию времени по-другому с датами разрешения MySQL, которые не могут быть представлены типом данных.NET, такой как'0000-00-00 00:00:00'. Эти различия могут вызвать проблемы если не должным образом обработанный.

Следующие разделы демонстрируют, как должным образом обработать дату и информацию времени при использовании Соединителя/Сети.

21.2.5.12.1. Доли секунды

Соединитель/Сеть 6.5 и выше поддерживает функцию долей секунды, представленную в MySQL 5.6.4. Доли секунды могли всегда определяться в литерале даты или передаваться назад и вперед как параметры и возвращаемые значения, но дробная часть была всегда неизолированной когда сохраненный в столбце таблицы. В MySQL 5.6.4 и выше, дробная часть теперь сохраняется в данных, хранивших и полученных через SQL. Для обработки доли секунды в MySQL 5.6.4 и выше, см. Доли секунды во Временных стоимостях. Для поведения долей секунды до MySQL 5.6.4 см. Доли секунды во Временных стоимостях.

Чтобы использовать более точную дату и типы времени, определите значение от 1 до 6, создавая столбец таблицы, например TIME(3) или DATETIME(6), представление числа цифр точности после десятичной точки. Определение точности 0 пропускает дробную часть полностью. В Вашем C# или код Visual Basic, обратитесь к Millisecond элемент, чтобы получить значение доли секунды от MySqlDateTime объект, возвращенный GetMySqlDateTime функция. DateTime объект, возвращенный GetDateTime функция также содержит дробное значение, но только первые 3 цифры.

Для связанных примеров кода см. следующее сообщение в блоге: https://blogs.oracle.com/MySqlOnWindows/entry/milliseconds_value_support_on_datetime

21.2.5.12.2. Проблемы при использовании Недопустимых Дат

Различия в обработке даты могут вызвать проблемы для разработчиков, которые используют недопустимые даты. Недопустимые даты MySQL не могут быть загружены в собственную.NET DateTime объекты, включая NULL даты.

Из-за этой проблемы.NET DataSet объекты не могут быть заполнены Fill метод MySqlDataAdapter class как недопустимые даты вызовет a System.ArgumentOutOfRangeException исключение, чтобы произойти.

21.2.5.12.3. Ограничение Недопустимых Дат

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

Ограничение недопустимых дат на стороне клиента столь же просто как всегда использование.NET DateTime class, чтобы обработать даты. DateTime class только позволит допустимые даты, гарантируя, что значения в Вашей базе данных также допустимы. Недостаток этого - то, что не полезно в смешанной среде, где.NET и не код.NET используется, чтобы управлять базой данных, поскольку каждое приложение должно выполнить свою собственную проверку допустимости даты.

Пользователи MySQL 5.0.2 и выше могут использовать новое traditional Режим SQL, чтобы ограничить недопустимые значения даты. Для получения информации об использовании traditional Режим SQL, см. Раздел 5.1.7, "Режимы SQL Сервера".

21.2.5.12.4. Обработка Недопустимых Дат

Хотя строго рекомендуется, чтобы Вы избежали использования недопустимых дат в пределах Вашего приложения.NET, возможно использовать недопустимые даты посредством MySqlDateTime тип данных.

MySqlDateTime тип данных поддерживает те же самые значения даты, которые поддерживаются сервером MySQL. Поведение значения по умолчанию Соединителя/Сети должно возвратить.NET объект DateTime для допустимых значений даты, и возвратить ошибку для недопустимых дат. Это значение по умолчанию может быть изменено, чтобы заставить Соединитель/Сеть возвращаться MySqlDateTime объекты для недопустимых дат.

Давать Соединителю/Сети команду возвращать a MySqlDateTime объект для недопустимых дат, добавляет следующая строка к Вашей строке подключения:

Allow Zero Datetime=True

Пожалуйста, отметьте что использование MySqlDateTime class может все еще быть проблематичным. Следующее является некоторыми известными проблемами:

  1. Привязка данных для недопустимых дат может все еще вызвать ошибки (у нулевых дат как 0000-00-00, кажется, нет этой проблемы).

  2. ToString возврат метода дата, отформатированная в стандартном формате MySQL (например, 2005-02-23 08:50:25). Это отличается от ToString поведение.NET DateTime class.

  3. MySqlDateTime class поддерживает НУЛЕВЫЕ даты, в то время как.NET DateTime class не делает. Это может вызвать ошибки, пытаясь преобразовать MySQLDateTime в DateTime, если Вы не проверяете на НУЛЬ сначала.

Из-за известных проблем лучшая рекомендация состоит в том, чтобы все еще использовать только допустимые даты в Вашем приложении.

21.2.5.12.5. Обработка НУЛЕВЫХ Дат

.NET DateTime тип данных не может обработать NULL значения. Также, присваивая значения от запроса до a DateTime переменная, следует сначала проверить, является ли значение фактически NULL.

При использовании a MySqlDataReader, используйте .IsDBNull метод, чтобы проверить, является ли значение NULL прежде, чем сделать присвоение:

Пример Visual Basic
If Not myReader.IsDBNull(myReader.GetOrdinal("mytime")) Then    myTime = myReader.GetDateTime(myReader.GetOrdinal("mytime"))Else    myTime = DateTime.MinValueEnd If
C# Пример
if (! myReader.IsDBNull(myReader.GetOrdinal("mytime")))    myTime = myReader.GetDateTime(myReader.GetOrdinal("mytime"));else    myTime = DateTime.MinValue;

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