2010-11-10 12 views
16

In C# c'è un SqlDateTime.MinValue e SqlDateTime.MaxValue, ma non riesco a trovarne uno per il tipo di dati SmallDateTime da SQL Server.Valori min e max SmallDateTime in C#

var smallDateTimeMin = DateTime(1900, 1, 1); 
var smallDateTimeMax = DateTime(2079, 6, 6); 

C'è uno o devo implementarlo da solo?

risposta

5

Non esiste l'equivalente smalldatetime in System.Data.SqlTypes. Né esiste un equivalente per il nuovo tipo datetime2. Quindi non mi aspetto costanti min-max per questi tipi nel framework .NET.

Ma i tipi sono ben documentate sul MSDN:

data e ora i dati dal 1 ° gennaio, 1753 fino al 31 dicembre 9999, ad un accuratezza di un trecentesimo di un secondo (equivalente a 3,33 millisecondi o 0,00333 secondi). I valori sono arrotondati agli incrementi di .000, .003 o .007 secondi, come mostrato nella tabella .

Quindi è possibile definire facilmente le proprie costanti min-max.

+3

'smalldatetime' funziona solo attraverso il 6 Giugno 2079, in base alla documentazione che hai collegato. – Hannele

2

Dal SQLDateTimemaps to bothdatetime e smalldatetime, suppongo che dovrai farlo manualmente.

16

Perché non utilizzare un metodo di estensione?

public static class DateTimeExtensions 
{ 
    public static DateTime SmallDateTimeMinValue(this DateTime sqlDateTime) 
    { 
     return new DateTime(1900, 01, 01, 00, 00, 00); 
    } 
    public static DateTime SmallDateTimeMaxValue(this DateTime sqlDateTime) 
    { 
     return new DateTime(2079, 06, 06, 23, 59, 00); 
    } 

} 


DateTime date = DateTime.Now; 
Console.WriteLine("Minvalue is {0} ", date.SmallDateTimeMinValue().ToShortDateString()); 

Ammettiamolo, sarebbe bello per le proprietà di estensione, ma quelle non esistono ancora.

2

valore minimo 1900-01-01 valore 00:00:00

Max 2079-06-06 23:59:00

1

Si dovrà utilizzare il proprio costanti. Sembrerebbe che lo spazio dei nomi System.Data.SqlTypes non sia completo senza SqlSmallDateTime, ma in realtà non è il caso. Lo scopo di tale spazio dei nomi è di fornire classi che impediscano errori di conversione dei tipi.

Lo spazio dei nomi System.Data.SqlTypes fornisce le classi per i tipi di dati nativi all'interno di SQL Server 2005. Queste classi forniscono un più sicuro, più veloce alternativa ai tipi di dati forniti dal .NET Framework Common Language Runtime (CLR). L'utilizzo delle classi in questo spazio dei nomi consente di evitare errori di conversione dei tipi causati dalla perdita di precisione. Poiché altri tipi di dati vengono convertiti in e da SqlTypes dietro le quinte, la creazione e l'utilizzo esplicito di oggetti all'interno di questo spazio dei nomi producono anche un codice più veloce.

MSDN

Poiché SqlDateTime è sufficiente a tal fine, è previsto nessun SqlSmallDateTime.

3

Per i miei scopi ho usato una semplice classe di supporto statica:

public static class SqlSmallDateTime 
{ 
    public static readonly SqlDateTime MinValue = 
     new SqlDateTime(new DateTime(1900, 01, 01, 00, 00, 00)); 

    public static readonly SqlDateTime MaxValue = 
     new SqlDateTime(new DateTime(2079, 06, 06, 23, 59, 00)); 
}