Исключение переполнения SqlDateTime - PullRequest
1 голос
/ 28 октября 2008

Я пытаюсь вставить значение только для времени, но получаю следующую ошибку

  • ex {"Переполнение SqlDateTime. Должно быть между 01.01.1753 12:00:00 и 31.12.9999 11:59:59."} System.Exception

Из внешнего интерфейса время выбирается с помощью элемента управления «TimeEdit» со стрелками вверх и вниз. Таблица в SQL Server имеет поля, установленные как smalldatetime. Мне нужно только хранить время. Я использую следующее для возврата данных в приложение

выберите id, CONVERT (CHAR (5), timeFrom, 8) как timeFrom, CONVERT (CHAR (5), timeTo, 8) как timeTo ОТ dbo.Availability где id = @id и dayName = @ weekday

Как передать время только столу?

Редактировать ~ Решение Согласно Euardo и Chris, мое решение состояло в том, чтобы передать строку datetime вместо строки только time. Я отформатировал свой результат в соответствии с Формат времени , используя «g».

Спасибо

Ответы [ 4 ]

3 голосов
/ 28 октября 2008

Вы можете установить дату на 1/1/1753, которая является минимальным значением даты для datetime в MSSQL, а затем добавить час, который вы хотите сохранить. Конечно, вы должны учитывать это каждый раз, когда вам нужно получить значение, но вы можете обернуть это с помощью некоторых помощников. Или вы можете использовать MSSQL 2008 и использовать новый тип данных TIME.

1 голос
/ 28 октября 2008

Выберите дату, которая находится в диапазоне (то есть 1/1/1970), и используйте ее для всего, что вы вставляете.

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

Если вы только отслеживаете время, подумайте о том, чтобы хранить его в int как смещение от полуночи в любой гранулярности, которая вам нужна (секунды, минуты, часы, ...). Затем вы можете преобразовать его в TimeSpan в своем коде, используя соответствующий метод TimeSpan.From ?? (). Чтобы вернуться в другую сторону, вы можете использовать TimeSpan.Total ?? и обрезать при необходимости. Если вам нужно выполнять ручные запросы, вы можете написать функцию SQL, которая преобразует часы / минуты / секунды в эквивалентное смещение.

Я предпочитаю это использованию даты и времени и выбору произвольного дня, поскольку это проясняет цель поля, что уменьшает путаницу.

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

В SQL нет такой вещи, как Time, есть только DateTime.

Для вашей цели я бы использовал что-то подобное, чтобы вернуть только часть времени.

SELECT (GETDATE() - (CAST(FLOOR(CAST(GETDATE() as FLOAT)) AS DateTime)))

где GETDATE () - дата и время, которое вы хотите отфильтровать.

При установке времени в базе данных вам нужно будет добавить «01/01/1901» или «01/01/1753» к времени.

Не используйте CAST и Convert to varchar при работе с datetime, это медленно. Придерживайтесь плавающих числовых операций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...