ole db tarih/saat geliştirmeleri için veri türü desteği

Bu konu, ole db hakkında bilgi sağlar ( SQL Server yerel istemci) türlerini destekleyen SQL ServerTarih ve Saat veri türlerini.

Satır kümeleri ve parametre veri türü eşleştirme

ole db yeni sunucu türlerini desteklemek için iki yeni veri türü sunar: DBTYPE_DBTIME2 ve DBTYPE_DBTIMESTAMPOFFSET. Aşağıdaki tablo tamamlandı gösterir sunucu türü eşlemesi:

SQL Serververi türü

ole db veri türü

Değer

datetime

DBTYPE_DBTIMESTAMP

135 (oledb.h)

smalldatetime

DBTYPE_DBTIMESTAMP

135 (oledb.h)

tarihi

DBTYPE_DBDATE

133 (oledb.h)

Saat

DBTYPE_DBTIME2

145 (sqlncli.h)

datetimeoffset

DBTYPE_DBTIMESTAMPOFFSET

146 (sqlncli.h)

datetime2

DBTYPE_DBTIMESTAMP

135 (oledb.h)

Veri biçimleri: Dizeler ve rakamları

SQL Serververi türü

ole db veri türü

İstemci dönüştürmeleri dize biçimi

datetime

DBTYPE_DBTIMESTAMP

'yyyy-AA-GG SS: [999]'

SQL Serverüç kesirli ikinci basamak Datetime için destekler.

smalldatetime

DBTYPE_DBTIMESTAMP

'yyyy-aa-gg: ss'

Bu veri türü, bir dakika doğruluk vardır. Saniye bileşen üzerinde sıfır çıktı ve sunucu tarafından girişte yuvarlanır.

tarihi

DBTYPE_DBDATE

'yyyy-aa-gg'

Saat

DBTYPE_DBTIME2

'SS [.9999999]'

Kesirli saniye isteğe bağlı olarak yedi basamaklı kullanılarak belirtilebilir.

datetime2

DBTYPE_DBTIMESTAMP

'yyyy-aa-gg: SS [.fffffff]'

Kesirli saniye isteğe bağlı olarak yedi basamaklı kullanılarak belirtilebilir.

datetimeoffset

DBTYPE_DBTIMESTAMPOFFSET

' yyyy-aa-gg: SS [.fffffff] +/-hh: mm'

Kesirli saniye isteğe bağlı olarak yedi basamaklı kullanılarak belirtilebilir.

Tarih ve saat rakamları çıkış sıralarını herhangi bir değişiklik vardır.

Kesirli saniye sonuçları içinde iki nokta (:). yerine nokta (.) kullanın

Uygulamalar için döndürülen dize değerleri her zaman belirli bir sütun için aynı uzunlukta olacak. Yıl, ay, gün, Saat, dakika ve ikinci bileşenleri kendi maksimum genişliği öndeki ile destekli. Tarih ve saat ile Saat ve dilimimi uzaklık arasında tam bir boşluk arasında tam bir boşluk olacak. Bir dilimimi uzaklığı her zaman bir işareti önünde. Bu işaretin bir artı olacaktır (ofset sıfır olduğunda +). İşaret ve uzaklık değeri arasında beyaz boşluk olacak. Kesirli saniye ile sondaki sıfırları, gerekirse, ama daha fazla sütun tanımlı duyarlık için yastıklı. DateTime sütunlar için üç Kesirli saniye basamak olacak. Smalldatetime sütunlar, orada-ecek var olmak hayır Kesirli saniye basamak ve saniye her zaman sıfır olacak.

Dönüşümleri uygulama tarafından sağlanan dize değerlerini daha esnek olacak ve bileşen değerlerini az maksimum genişliği sağlayacak. Yıl 1-4 basamak arasında olabilir. Ay, gün, Saat, dakika ve saniye 1 ya da 2 basamak arasında olabilir. Tarih/Saat ve Saat/dilimimi uzaklıklar arasındaki rasgele boşluk olabilir. Sıfır saat ve sıfır dakika olan uzaklığı işareti, artı veya eksi olabilir. Ardarda sıfırları maksimum 9 basamak Kesirli saniye için izin verilir. Saat bileşeni, ondalık noktası ve hiçbir Kesirli saniye basamak ile sonlandırabilirsiniz.

Boş bir dize geçerli bir tarih/saat hazır değil ve null değerini göstermiyor. Bir tarih veya saat değeri boş bir dize dönüştürme girişimi hata SQLState 22018 ve mesaj "ınvalid character value for cast specification" ile sonuçlanır.

Veri biçimleri: Veri yapıları

ole db ole db özel yapılar, aşağıda açıklanan uygundur ve aynı kısıtlamaları olarak odbc. Bunlar Gregoryen takvimden alınır:

  • Ay, 1 ile 12 arasındaki aralıktır.

  • Gün alanı aralığı 1 ay gün sayısı üzerinden ve atılım yılı alarak yıl ve ay alanları ile tutarlı olmalıdır.

  • Saat aralığı 0 ile 23.

  • 0 İle 59 dakika aralıktır.

  • Aralığı 0 ile 59 saniye. Bu iki sıçrama sideral time ile eşitleme sağlamak saniye verir.

Uygulamaları aşağıdaki varolan ole db yapılar için değiştirilmiş yeni destek SQL ServerTarih ve Saat veri türlerini. Tanımlar, ancak değişmiş değil.

  • dbtype_date (bir otomasyon tarih türü budur. Dahili olarak temsil edilen bir double. Gün 30 Aralık 1899 yılından beri bütün bir parçasıdır ve bir gün kısmını kesirli bölümüdür. Bu tür bir kesinlik var 1 ikinci, böylece etkili bir ölçek 0 vardır.)

  • DBTYPE_DBDATE

  • DBTYPE_DBTIME

  • DBTYPE_DBTIMESTAMP (kesir alanı ole db tarafından ikinci bir (nanosüre) ve 0-999,999,999 aralığından billionths sayısı olarak tanımlanır)

  • DBTYPE_FILETIME

DBTYPE_DBTIME2

Bu yapı, hem 32 bit hem de 64-bit işletim sistemlerinde 12 bayt eklenir.

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

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;

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

Eğer timezone_hournegatif timezone_minutenegatif olması gereken ya da sıfır. Eğer timezone_hourpozitif, timezone minutepozitif olmalı ya da sıfır. Eğer timezone_hoursıfır, timezone minute-59 ve +59 arasında bir değer alabilir.

SSVARIANT

Bu yapı, şimdi yeni yapıları, DBTYPE_DBTIME2 ve DBTYPE_DBTIMESTAMPOFFSET, içerir ve uygun türleri için kesirli saniye ölçek ekler.

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;
// ...
   };
};

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;
// ...
   };
};

Ayrıca, numaralandırma türünü belirleyen enum türü SSVARIANT kodlama ile ilişkili gibi genişletilmiş:

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
};

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
};

Geçirme uygulamaları SQL ServerKullanan istemci yerel sql_variantve sınırlı duyarlığını datetimetemel şeması kullanılacak güncel değilse güncelleştirilmesi gerekiyor datetime2yerine datetime.

SSVARIANT erişim makrolar da aşağıdaki ek olarak genişletilmiştir:

#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)

#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)

ITableDefinition::CreateTable içindeki veri türü eşleştirme

Aşağıdaki türü eşleştirmesi dbcolumndesc yapılarını tarafından kullanılan kullanılır ITableDefinition::CreateTable:

ole db veri türü (wType)

SQL Serververi türü

Notlar

DBTYPE_DBDATE

tarihi

DBTYPE_DBTIMESTAMP

datetime2(p)

SQL ServerYerel istemci ole db sağlayıcısı dbcolumdesc inceler bScaleKesirli saniye duyarlık belirlemek için üye.

DBTYPE_DBTIME2

time(p)

SQL ServerYerel istemci ole db sağlayıcısı dbcolumdesc inceler bScaleKesirli saniye duyarlık belirlemek için üye.

DBTYPE_DBTIMESTAMPOFFSET

datetimeoffset(p)

SQL ServerYerel istemci ole db sağlayıcısı dbcolumdesc inceler bScaleKesirli saniye duyarlık belirlemek için üye.

Ne zaman bir uygulama içinde dbtype_dbtımestamp belirtir wType, eşleme kılabilirsiniz datetime2bir tür adı sağlayarak pwszTypeName. Eğer datetimebelirtilen bScale3 olmalı. Eğer smalldatetimebelirtilen bScale0 olmalı. Eğer bScaleile tutarlı değil wTypeve pwszTypeName,db_e_badscale döndürüldü.

Ayrıca bkz.

Kavramlar

Tarih/saat geliştirmeleri (ole db)