Spec-Zone .ru
спецификации, руководства, описания, API
|
MySQL и языки.NET обрабатывают дату и информацию времени по-другому с датами разрешения MySQL, которые не могут
быть представлены типом данных.NET, такой как'0000-00-00 00:00:00
'. Эти различия
могут вызвать проблемы если не должным образом обработанный.
Следующие разделы демонстрируют, как должным образом обработать дату и информацию времени при использовании Соединителя/Сети.
Соединитель/Сеть 6.5 и выше поддерживает функцию долей секунды, представленную в MySQL 5.6.4. Доли секунды
могли всегда определяться в литерале даты или передаваться назад и вперед как параметры и возвращаемые
значения, но дробная часть была всегда неизолированной когда сохраненный в столбце таблицы. В MySQL 5.6.4 и
выше, дробная часть теперь сохраняется в данных, хранивших и полученных через SQL. Для обработки доли
секунды в MySQL 5.6.4 и выше, см. Раздел 11.3.6, "Доли
секунды во Временных стоимостях". Для поведения долей секунды до MySQL 5.6.4 см.
Чтобы использовать более точную дату и типы времени, определите значение от 1 до 6, создавая столбец
таблицы, например TIME(3)
или DATETIME(6)
,
представление числа цифр точности после десятичной точки. Определение точности 0 пропускает дробную часть
полностью. В Вашем C# или код Visual Basic, обратитесь к Millisecond
элемент,
чтобы получить значение доли секунды от MySqlDateTime
объект, возвращенный
GetMySqlDateTime
функция. DateTime
объект,
возвращенный GetDateTime
функция также содержит дробное значение, но только
первые 3 цифры.
Для связанных примеров кода см. следующее сообщение в блоге:
Различия в обработке даты могут вызвать проблемы для разработчиков, которые используют недопустимые даты.
Недопустимые даты MySQL не могут быть загружены в собственную.NET DateTime
объекты, включая NULL
даты.
Из-за этой проблемы.NET DataSet
объекты не могут быть заполнены Fill
метод MySqlDataAdapter
class как недопустимые
даты вызовет a System.ArgumentOutOfRangeException
исключение, чтобы произойти.
Лучшее решение проблемы даты состоит в том, чтобы ограничить пользователей от ввода недопустимых дат. Это может быть сделано или на клиенте или на стороне сервера.
Ограничение недопустимых дат на стороне клиента столь же просто как всегда использование.NET DateTime
class, чтобы обработать даты. DateTime
class только позволит допустимые даты, гарантируя, что значения в Вашей базе данных также допустимы.
Недостаток этого - то, что не полезно в смешанной среде, где.NET и не код.NET используется, чтобы управлять
базой данных, поскольку каждое приложение должно выполнить свою собственную проверку допустимости даты.
Пользователи MySQL 5.0.2 и выше могут использовать новое traditional
Режим SQL,
чтобы ограничить недопустимые значения даты. Для получения информации об использовании traditional
Режим SQL, см. Раздел 5.1.7,
"Режимы SQL Сервера".
Хотя строго рекомендуется, чтобы Вы избежали использования недопустимых дат в пределах Вашего
приложения.NET, возможно использовать недопустимые даты посредством MySqlDateTime
тип данных.
MySqlDateTime
тип данных поддерживает те же самые значения даты, которые
поддерживаются сервером MySQL. Поведение значения по умолчанию Соединителя/Сети должно возвратить.NET объект
DateTime для допустимых значений даты, и возвратить ошибку для недопустимых дат. Это значение по умолчанию
может быть изменено, чтобы заставить Соединитель/Сеть возвращаться MySqlDateTime
объекты для недопустимых дат.
Давать Соединителю/Сети команду возвращать a MySqlDateTime
объект для
недопустимых дат, добавляет следующая строка к Вашей строке подключения:
Allow Zero Datetime=True
Пожалуйста, отметьте что использование MySqlDateTime
class может все еще быть
проблематичным. Следующее является некоторыми известными проблемами:
Привязка данных для недопустимых дат может все еще вызвать ошибки (у нулевых дат как 0000-00-00, кажется, нет этой проблемы).
ToString
возврат метода дата, отформатированная в
стандартном формате MySQL (например, 2005-02-23 08:50:25
). Это
отличается от ToString
поведение.NET DateTime class.
MySqlDateTime
class поддерживает НУЛЕВЫЕ даты, в то
время как.NET DateTime class не делает. Это может вызвать ошибки, пытаясь преобразовать
MySQLDateTime в DateTime, если Вы не проверяете на НУЛЬ сначала.
Из-за известных проблем лучшая рекомендация состоит в том, чтобы все еще использовать только допустимые даты в Вашем приложении.
.NET DateTime
тип данных не может обработать NULL
значения. Также, присваивая значения от запроса до a DateTime
переменная,
следует сначала проверить, является ли значение фактически NULL
.
При использовании a MySqlDataReader
, используйте .IsDBNull
метод, чтобы проверить, является ли значение NULL
прежде, чем сделать
присвоение:
If Not myReader.IsDBNull(myReader.GetOrdinal("mytime")) Then myTime = myReader.GetDateTime(myReader.GetOrdinal("mytime"))Else myTime = DateTime.MinValueEnd If
if (! myReader.IsDBNull(myReader.GetOrdinal("mytime"))) myTime = myReader.GetDateTime(myReader.GetOrdinal("mytime"));else myTime = DateTime.MinValue;
NULL
значения будут работать в наборе данных и могут быть обязаны сформировать
средства управления без специальной обработки.