il campo time di sql può contenere come valore massimo 23:59:59.9999999
pertanto non puoi avere più di un giorno,
quello che ti consigliavano è giusto, salvare il valore del DateTime in formato long (bigint) tramite la proprietà Ticks.
la struttura TimeSpan accetta come argomento nel costruttore un valore long rappresentato da i Ticks, pertanto ti basta eseguire la query sul DB facendoti ritornare indietro i Ticks ed in seguito generi l'oggetto TimeSpan(long tick) con il tuo valore,
tramite TimeSpan puoi accedere ai singoli campo, giorni, ore, minuti etc.
codice:
static void Main(string[] args)
{
DateTime from = new DateTime(2016, 01, 23, 12, 00, 00);
DateTime to = new DateTime(2016, 01, 25, 10, 30, 30);
// intervallo long (bigint) da inserire nel DB.
long deltaToDB = to.Ticks - from.Ticks;
Console.WriteLine("delta: " + deltaToDB);
// intervallo long (bigint) da prelevare dal DB.
long deltaFromDB = deltaToDB;
TimeSpan deltaTime = TimeSpan.FromTicks(deltaFromDB); // oppure new TimeSpan(deltaFromDB);
Console.WriteLine("deltaTime: " + deltaTime); // output: 1d 22h 30m 30s
Console.ReadLine();
}
PS: se nel tuo DB salvi già la data di inizio appuntamento e di fine appuntamento, ti sconsiglierei di salvare l'intervallo, essendo facilmente calcolabile, altrimenti ad ogni cambio di una di queste due date dovresti aggiornare ogni volta anche il campo di intervallo, in seguito se qualcosa non va come dovrebbe inizieresti ad avere dati inconsistenti.