2015-10-03 3 views
0

Я хочу хранить время в таблице, и я занимаю время (7) DataType для хранения времени.SqlDbType.Time переполнение. Значение за пределами допустимого диапазона

Когда я вычитаю 2 DateTime, я получил значение «1.18: 36: 36.7484253» в моей переменной TimeSpan.

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

SqlDbType.Time overflow. Value '1.18:36:36.7484253' is out of range. Must be between 00:00:00.0000000 and 23:59:59.9999999 

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

Я использую SQL Server 2008 и C#.

+0

Одним из простых вариантов было бы хранить количество тиков, миллисекунд, секунд или любую единицу гранулярности, которую вы хотите, точно так же, как целое число. –

+0

@JonSkeet, как использовать тики. – user3441151

+0

Вы используете свойство TimeSpan.Ticks ... –

ответ

0

, чтобы решить эту проблему, вам нужно сделать следующее:

HI, вам нужно создать новый TimeSpan переменную.

//////// Calculation for TimeStamp ////////// 

       DateTime fechaAux  = DateTime.Now; 
       DateTime fechaIngresoAM = new DateTime(fechaAux.Year, fechaAux.Month, fechaAux.Day, 8, 30, 00); 


       TimeSpan auxIngresoAM = ingresoAM.Subtract(fechaIngresoAM); 
       TimeSpan resultadoRetrasoIngresoAM = new TimeSpan(auxIngresoAM.Hours, auxIngresoAM.Minutes, auxIngresoAM.Milliseconds); 



       command.Parameters.Add(new SqlParameter("@retraso_ingreso_am", SqlDbType.Time)); 
       command.Parameters["@retraso_ingreso_am"].Value = resultadoRetrasoIngresoAM; 

       command.ExecuteNonQuery(); 

Он будет работать так, как вы ожидаете.

+2

«Он будет работать так, как вы ожидаете». Нет, это не так. OP работает со временем ~ 42 часа. Тип данных SQL Server 'time' предназначен для хранения * времени суток *, а не * временного интервала *. Таким образом, он не поддерживает какие-либо значения, превышающие 24 часа (и он не поддерживает негативы, дополнение и т. Д., Что вы также ожидаете, что тип данных временного диапазона будет поддерживаться) –

0

SQL Server хранит время без дней. Допустимый диапазон должен находиться между 00: 00: 00.0000000 и 23: 59: 59.9999999, как указано в сообщении.

Для экономии времени вы можете конвертировать TimeSpan в Long to method Ticks или суммировать минуты и секунды.

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