2008-10-28 3 views
1

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

  • ех { "Переполнение SqlDateTime. Должно быть между 1/1/1753 12:00:00 AM и 12/31/9999 11:59:59 PM. "} System.Exception

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

выберите идентификатор, конвертирование (СИМ (5), timeFrom, 8), как timeFrom, CONVERT (CHAR (5), TimeTo, 8), как TimeTo ОТ dbo.Availability где id = @id и dayName = @weekday

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

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

Благодаря

+0

Не должны ли вы отметить ответ Euardos или Chris как правильный ответ? – Kasper 2008-10-28 18:03:18

+0

Да, я тоже это сказал .... и с дополнительным советом, и я получаю friggn -1. – StingyJack 2008-10-28 18:18:51

+0

Kasper- я сделал отметку о Крисе .... что у вас в этой коробке Pentium 10? – 2008-10-31 03:52:15

ответ

1

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

-1

нет такого понятия, как время в SQL, есть только DateTime.

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

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

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

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

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

3

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

0

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

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

Смежные вопросы