|
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 значения будут работать в наборе данных и могут быть обязаны сформировать
средства управления без специальной обработки.