Udostępnij za pośrednictwem


Obsługa typu danych OLE DB Data/Godzina ulepszenia

Ten temat zawiera informacje OLE DB (SQL Server Native Client) obsługujące typy SQL Server Data /czas typów danych.

Mapowanie typu danych zestawów wierszy oraz parametry

OLE DB zawiera dwa nowe typy danych do obsługi nowych typów serwera: DBTYPE_DBTIME2 i DBTYPE_DBTIMESTAMPOFFSET.W poniższej tabela przedstawiono mapowanie typu całego serwera:

SQL Servertyp danych

Typ danych OLE DB

Wartość

data_i_godzina

DBTYPE_DBTIMESTAMP

135 (oledb.h)

smalldatetime

DBTYPE_DBTIMESTAMP

135 (oledb.h)

data

DBTYPE_DBDATE

133 (oledb.h)

godzina

DBTYPE_DBTIME2

145 (sqlncli.h)

datetimeoffset

DBTYPE_DBTIMESTAMPOFFSET

146 (sqlncli.h)

datetime2

DBTYPE_DBTIMESTAMP

135 (oledb.h)

Formaty danych: Ciągi i literałów

SQL Servertyp danych

Typ danych OLE DB

Format ciągu dla konwersji klient

data_i_godzina

DBTYPE_DBTIMESTAMP

"rrrr mm-dd ss [.999]"

SQL Serverobsługuje maksymalnie trzy cyfry drugiego ułamkowe Datetime.

smalldatetime

DBTYPE_DBTIMESTAMP

"rrrr mm-dd ss"

Ten typ danych ma dokładność jedną minutę.Składnik sekund będzie zero w danych wyjściowych i zaokrąglone na wejście przez serwer.

data

DBTYPE_DBDATE

"rrrr mm-dd"

godzina

DBTYPE_DBTIME2

"ss [.9999999]"

Opcjonalnie można określić ułamków sekund do siedmiu cyfry.

datetime2

DBTYPE_DBTIMESTAMP

"rrrr mm-dd ss [.fffffff]"

Opcjonalnie można określić ułamków sekund do siedmiu cyfry.

datetimeoffset

DBTYPE_DBTIMESTAMPOFFSET

"rrrr mm-dd ss [.fffffff] +/-hh: mm"

Opcjonalnie można określić ułamków sekund do siedmiu cyfry.

data nie ma żadnych zmian w sekwencji unikowych /czas literałów.

Ułamków sekund w wyniki używać kropki (.) zamiast dwukropka (:)).

Ciąg wartości zwracanych do aplikacji będą zawsze tej samej długości, dla danej kolumna.Roku, miesiąc, dzień, godzinę, minutę i drugiej części zostanie uzupełniony z zer ich maksymalną szerokość.Będzie dokładnie jedną spację między datą i czas i dokładnie jedną spację między czas i czasprzesunięcie strefy.Przesunięcie timezone będzie zawsze poprzedzona znakiem.Jest to znak plus (+) przesunięcie wynosi zero.Być nie odstępu między znak i wartością przesunięcia.Ułamków sekund zostanie dopełnione końcowe zera, jeśli to konieczne, do określonych precyzji kolumna, ale nie dalsze.Datetime kolumn będą trzy cyfry ułamków sekund.Smalldatetime kolumn będzie Brak miejsc ułamków sekund i sekund będzie zawsze równa zero.

Konwersje z wartości ciąg aplikacji będzie bardziej elastyczne i pozwoli na składnik wartości mniejszej niż maksymalna szerokość.Lata mogą być cyfr 1-4.Miesięcy, dni, godzin, minut i sekund można cyfry 1 lub 2.Może istnieć dowolnego odstępu między datą /czas i czas/czasprzesunięcia strefy.Znak o godzinach zero i zero minut przesunięcie może być plus lub minus.Końcowe zera są dozwolone dla ułamków sekund maksymalnie 9 cyfr.A czas składnika można zakończyć z punktem dziesiętnym i nie cyfr ułamków sekund.

Pusty ciąg nie jest prawidłową data/czas literał i nie reprezentuje wartość NULL.Próba przekonwertować pusty ciąg na datę /czas wartość spowoduje błędów z SQLState 22018 i komunikat "nieprawidłowy znak wartość dla specyfikacji".

Formaty danych: Struktury danych

Opisane poniżej struktury specyficzne dla OLE DB OLE DB spełnia te same ograniczenia jak ODBC.Są one pobierane z kalendarza gregoriańskiego:

  • Miesiąc zakres wynosi od 1 do 12.

  • Dzień zakres wynosi od 1 do liczby dni w miesiącu i muszą być zgodne z pole rok i miesiąc, biorąc pod uwagę przestępnego.

  • Godzinę zakres wynosi od 0 do 23.

  • MINUTE zakres wynosi od 0 do 59.

  • Sekund z zakres od 0 do 59.Dzięki temu do dwóch sekund przestępnych zachować synchronizację z czas sideral.

Implementacje dla następujących istniejących OLE DB zmodyfikowane do obsługi nowych struktur SQL Server data i czas danych typów.Definicje, jednak nie uległy zmianie.

  • DBTYPE_DATE (jest to typ daty automatyzacji.Wewnętrznie jest reprezentowana jako double.Cała część jest liczbą dni od 30 grudnia 1899 roku, a część ułamkowa część doby.Ten typ ma dokładność 1 sekundę ma tak skuteczne skali 0.)

  • DBTYPE_DBDATE

  • DBTYPE_DBTIME

  • DBTYPE_DBTIMESTAMP (pole frakcji jest zdefiniowane przez OLE DB jako liczba billionths druga (nanosekundach) i zakresy z 0 999,999,999)

  • DBTYPE_FILETIME

DBTYPE_DBTIME2

Ta struktura jest uzupełniony 12 bajtów w 32-bitowych i 64-bitowych systemach operacyjnych.

typedef struct tagDBTIME2 {
    USHORT hour;
    USHORT minute;
    USHORT second;
    ULONG fraction;
    } DBTIME2;

DBTYPE_ DBTIMESTAMPOFFSET

typedef struct tagDBTIMESTAMPOFFSET {
    SHORT year;
    USHORT month;
    USHORT day;
    USHORT hour;
    USHORT minute;
    USHORT second;
    ULONG fraction;
    SHORT timezone_hour;
    SHORT timezone_minute;
    } DBTIMESTAMPOFFSET;

Jeśli timezone_hour jest ujemna, timezone_minute musi być ujemna lub zero.Jeśli timezone_hour jest dodatnia, timezone minute musi być dodatnią lub zero.Jeśli timezone_hour wynosi zero, timezone minute może zawierać wartość z zakresu -59 do + 59.

SSVARIANT

Ta struktura teraz zawiera nowych struktur DBTYPE_DBTIME2 i DBTYPE_ DBTIMESTAMPOFFSET oraz skali ułamków sekund dla odpowiednich typów.

struct SSVARIANT {
   SSVARTYPE vt;
   DWORD dwReserved1;
   DWORD dwReserved2;
   union {
// ...
      DBTIMESTAMP tsDateTimeVal;
      DBDATE dDateVal;
      struct _Time2Val {
         DBTIME2 tTime2Val;
         BYTE bScale;
      } Time2Val;
      struct _DateTimeVal {
         DBTIMESTAMP tsDateTimeVal;
         BYTE bScale;
      } DateTimeVal;
      struct _DateTimeOffsetVal { 
         DBTIMESTAMPOFFSET tsoDateTimeOffsetVal;
         BYTE bScale;
      } DateTimeOffsetVal;
// ...
   };
};

Ponadto enum skojarzonych z SSVARIANT typ kodowania, określający typ wyliczenia zostaną rozszerzone w następujący sposób:

enum SQLVARENUM {
// ...
   // Datetime
   VT_SS_DATETIME      = DBTYPE_DBTIMESTAMP,
   VT_SS_SMALLDATETIME = 206,

   VT_SS_DATE = DBTYPE_DBDATE,
   VT_SS_TIME2 = DBTYPE_DBTIME2,
   VT_SS_DATETIME2 = 212
   VT_SS_DATETIMEOFFSET = DBTYPE_DBTIMESTAMPOFFSET
};

Aplikacje migracji do SQL Server Native Client, który korzysta z sql_variant i polegać na dokładność ograniczone datetime będą musiały aktualizowane, jeśli podstawowy schemat jest aktualizowany do używania datetime2 zamiast datetime.

Makra programu access dla SSVARIANT również zostały rozszerzone o dodanie następujących czynności:

#define V_SS_DATETIME2(X)       V_SS_UNION(X, DateTimeVal)
#define V_SS_TIME2(X)           V_SS_UNION(X, Time2Val)
#define V_SS_DATE(X)            V_SS_UNION(X, dDateVal)
#define V_SS_DATETIMEOFFSET(X)  V_SS_UNION(X, DateTimeOffsetVal)

Mapowanie typu danych w ITableDefinition::CreateTable

Następujące mapowania typu jest używana z struktur DBCOLUMNDESC używany przez ITableDefinition::CreateTable:

Typ danych OLE DB (wType)

SQL Servertyp danych

Uwagi

DBTYPE_DBDATE

data

DBTYPE_DBTIMESTAMP

datetime2(p)

SQL Server Macierzystego klienta dostawca OLE DB sprawdzi DBCOLUMDESC bScaleelement członkowski do określenia dokładności ułamków sekund.

DBTYPE_DBTIME2

time(p)

SQL Server Macierzystego klienta dostawca OLE DB sprawdzi DBCOLUMDESC bScaleelement członkowski do określenia dokładności ułamków sekund.

DBTYPE_DBTIMESTAMPOFFSET

datetimeoffset(p)

SQL Server Macierzystego klienta dostawca OLE DB sprawdzi DBCOLUMDESC bScaleelement członkowski do określenia dokładności ułamków sekund.

Gdy aplikacja określa DBTYPE_DBTIMESTAMP w wType, można zastąpić, mapowanie na datetime2 , podając nazwę typu w pwszTypeName.Jeśli datetime jest określony, bScale musi być 3.Jeśli smalldatetime jest określony, bScale musi być 0.Jeśli bScale nie jest zgodny z wType i pwszTypeName,DB_E_BADSCALE jest zwracany.

Zobacz także

Koncepcje