Udostępnij przez


Nowe funkcje daty i godziny z poprzednich SQL Server wersji (OLE DB)

W tym temacie opisano oczekiwane zachowanie, gdy aplikacja klienta korzystającego z enhanced Data i czas funkcje komunikuje się z wersja z SQL Server starsze niż SQL Server 2008, i gdy klient skompilowany z wersja z SQL Server Native Client starsze niż SQL Server 2008 wysyła polecenia do serwera obsługującego enhanced Data i czas funkcje.

Zachowanie klienta niższego poziomu

Aplikacje klienckie, które używają wersja programu SQL Server Native Client starsze niż SQL Server 2008 Zobacz nową datę /czas typy jak nvarchar kolumny.Zawartość kolumna są reprezentacje literału.Aby uzyskać więcej informacji, zobacz "formaty danych: Ciągi i literałów" sekcja Obsługa typu danych OLE DB Data/Godzina ulepszenia. Rozmiar kolumna jest maksymalna długość literału dokładność określona dla kolumna.

Wykaz interfejsów API zwróci metadane zgodne z niedziałający-poziomu danych wpisz kod zwracany do klient (na przykład nvarchar) i skojarzonym niedziałający-poziom reprezentacji (na przykład właściwe literału format).Jednak nazwa typu danych zwróconych będzie rzeczywistym SQL Server 2008 nazwy typu.

Gdy aplikacja klient niższego poziomu uruchamia przeciwko SQL Server 2008 (lub nowsze) serwera na zmiany schematu, które do daty /czas typy zostały dokonane, oczekiwane zachowanie jest następująca:

Typ klient OLE DB

Typ programu SQL Server 2005

SQL Server 2008 (lub nowszego) typu

Wynik konwersji (serwera do klient)

Parametr konwersji (od klient do serwera)

DBTYPE_DBDATE

Datetime

Data

OK

OK

DBTYPE_DBTIMESTAMP

Czas pól zestaw do zera.

IRowsetChange zakończy się niepowodzeniem z powodu do obcinania ciąg, jeśli czas pole jest różna od zera.

DBTYPE_DBTIME

Time(0)

OK

OK

DBTYPE_DBTIMESTAMP

Pola Data zestaw do bieżącej data.

IRowsetChangezakończy się niepowodzeniem z powodu do obcinania ciąg Jeśli ułamków sekund są zera.

Data jest ignorowana.

DBTYPE_DBTIME

Time(7)

Błąd — nieprawidłowa czas literału.

OK

DBTYPE_DBTIMESTAMP

Błąd — nieprawidłowa czas literału.

OK

DBTYPE_DBTIMESTAMP

Datetime2(3)

OK

OK

DBTYPE_DBTIMESTAMP

Datetime2(7)

OK

OK

DBTYPE_DBDATE

Smalldatetime

Data

OK

OK

DBTYPE_DBTIMESTAMP

Czas pól zestaw do zera.

IRowsetChange zakończy się niepowodzeniem z powodu do obcinania ciąg, jeśli czas pole jest różna od zera.

DBTYPE_DBTIME

Time(0)

OK

OK

DBTYPE_DBTIMESTAMP

Pola Data zestaw do bieżącej data.

IRowsetChange zakończy się niepowodzeniem z powodu do obcinania ciąg Jeśli ułamków sekund są zera.

Data jest ignorowana.

DBTYPE_DBTIMESTAMP

Datetime2(0)

OK

OK

OK oznacza, że jeśli go pracował z SQL Server 2005, należy kontynuować pracę z SQL Server 2008 (lub nowsze).

Tylko następujące typowe zmiany schematu zostały uznane za:

  • Przy użyciu nowego typu, gdzie logicznie aplikacja wymaga tylko data lub czas wartości.Jednak aplikacja została zmuszona do korzystania z datetime lub smalldatetime ponieważ oddzielne Data i czas nie były dostępne typy.

  • Uzyskanie dodatkowych ułamków sekund precyzji lub dokładności przy użyciu nowego typu.

  • Przełączanie do datetime2 , ponieważ jest to preferowany typ danych dla daty i czas.

Aplikacje używające metadane serwera uzyskanej za pomocą ICommandWithParameters::GetParameterInfo lub wiersza schematuzestaws, aby zestaw parametr typu informacji za pomocą ICommandWithParameters::SetParameterInfo zakończy się niepowodzeniem podczas konwersji klient, gdzie ciąg znaków reprezentujący typ źródło jest większy niż ciąg znaków reprezentujący typ obiekt docelowy.Na przykład, jeśli powiązanie klient korzysta z DBTYPE_DBTIMESTAMP i kolumna serwera jest data SQL Server Native Client przekonwertuje wartość "dd rrrr mm hh:mm:ss.fff", ale metadane serwera będą zwracane jako nvarchar(10).Przepełnienie wynikowy powoduje DBSTATUS_E_CATCONVERTVALUE.Podobne problemy z konwersji danych przez IRowsetChange, ponieważ metadane zestawu zestaw wierszy z resultset metadanych.

Parametr i metadane wierszy

W tej sekcji opisano metadane dla parametrów, wynik kolumn i wierszy schematu dla klientów, którzy są kompilowane w wersja SQL Server Native Client starsze niż SQL Server 2008.

ICommandWithParameters::GetParameterInfo

Struktura DBPARAMINFO zwraca następujące informacje za pośrednictwem prgParamInfo parametr:

Typ parametru

wType

ulParamSize

bPrecision

bScale

data

DBTYPE_WSTR

10

~0

~0

godzina

DBTYPE_WSTR

8, 10..16

~0

~0

smalldatetime

DBTYPE_DBTIMESTAMP

16

16

0

data_i_godzina

DBTYPE_DBTIMESTAMP

16

23

3

datetime2

DBTYPE_WSTR

19,21..27

~0

~0

datetimeoffset

DBTYPE_WSTR

26,28..34

~0

~0

Należy zauważyć, że niektóre z tych zakresów wartości nie są ciągłe; na przykład 9 brakuje w 8 10..16.Jest to spowodowane dodanie przecinka dziesiętnego po dokładność ułamkowa jest większa od zera.

IColumnsRowset::GetColumnsRowset

Zwracane są następujące kolumny:

Typ kolumny

DBCOLUMN_TYPE

DBCOLUMN_COLUMNSIZE

DBCOLUMN_PRECISION

DBCOLUMN_SCALE DBCOLUMN_DATETIMEPRECISION

data

DBTYPE_WSTR

10

NULL

NULL

godzina

DBTYPE_WSTR

8, 10..16

NULL

NULL

smalldatetime

DBTYPE_DBTIMESTAMP

16

16

0

data_i_godzina

DBTYPE_DBTIMESTAMP

16

23

3

datetime2

DBTYPE_WSTR

19,21..27

NULL

NULL

datetimeoffset

DBTYPE_WSTR

26,28..34

NULL

NULL

ColumnsInfo::GetColumnInfo

Struktura DBCOLUMNINFO zwraca następujące informacje:

Typ parametru

wType

ulColumnSize

bPrecision

bScale

data

DBTYPE_WSTR

10

~0

~0

czas(1..7)

DBTYPE_WSTR

8, 10..16

~0

~0

smalldatetime

DBTYPE_DBTIMESTAMP

16

16

0

data_i_godzina

DBTYPE_DBTIMESTAMP

16

23

3

datetime2

DBTYPE_WSTR

19,21..27

~0

~0

datetimeoffset

DBTYPE_WSTR

26,28..34

~0

~0

Schemat zestawów wierszy.

W tej sekcji omówiono metadane dla parametrów, wynik kolumn i wierszy schematu dla nowych typów danych.This information is useful is you have a client provider developed using tools earlier than SQL Server 2008 SQL Server Native Client.

Zestaw wierszy kolumn

Zwracane są następujące wartości w kolumnie Data /czas typów:

Typ kolumny

DATA_TYPE

CHARACTER_MAXIMUM_LENGTH

CHARACTER_OCTET_LENGTH

DATETIME_PRECISION

data

DBTYPE_WSTR

10

20

NULL

godzina

DBTYPE_WSTR

8, 10..16

16,20..32

NULL

smalldatetime

DBTYPE_DBTIMESTAMP

NULL

NULL

0

data_i_godzina

DBTYPE_DBTIMESTAMP

NULL

NULL

3

datetime2

DBTYPE_WSTR

19,21..27

38,42..54

NULL

datetimeoffset

DBTYPE_WSTR

26,28..34

52, 56..68

NULL

PROCEDURE_PARAMETERS wierszy

Zwracane są następujące wartości w kolumnie Data /czas typów:

Typ kolumny

DATA_TYPE

CHARACTER_MAXIMUM_LENGTH

CHARACTER_OCTET_LENGTH

TYPE_NAME

LOCAL_TYPE_NAME

data

DBTYPE_WSTR

10

20

data

godzina

DBTYPE_WSTR

8, 10..16

16,20..32

godzina

smalldatetime

DBTYPE_DBTIMESTAMP

NULL

NULL

smalldatetime

data_i_godzina

DBTYPE_DBTIMESTAMP

NULL

NULL

data_i_godzina

datetime2

DBTYPE_WSTR

19,21..27

38,42..54

datetime2

datetimeoffset

DBTYPE_WSTR

26,28..34

52, 56..68

datetimeoffset

PROVIDER_TYPES wierszy

Następujące wiersze są zwracane dla daty /czas typów:

Typ->

Kolumna

data

godzina

smalldatetime

data_i_godzina

datetime2

datetimeoffset

TYPE_NAME

data

godzina

smalldatetime

data_i_godzina

datetime2

datetimeoffset

DATA_TYPE

DBTYPE_WSTR

DBTYPE_WSTR

DBTYPE_DBTIMESTAMP

DBTYPE_DBTIMESTAMP

DBTYPE_WSTR

DBTYPE_WSTR

COLUMN_SIZE

10

16

16

23

27

34

LITERAL_PREFIX

LITERAL_SUFFIX

CREATE_PARAMS

NULL

NULL

NULL

NULL

NULL

NULL

IS_NULLABLE

WARTOŚĆ INNA NIŻ VARIANT_TRUE

WARTOŚĆ INNA NIŻ VARIANT_TRUE

WARTOŚĆ INNA NIŻ VARIANT_TRUE

WARTOŚĆ INNA NIŻ VARIANT_TRUE

WARTOŚĆ INNA NIŻ VARIANT_TRUE

WARTOŚĆ INNA NIŻ VARIANT_TRUE

CASE_SENSITIVE

VARIANT_FALSE

VARIANT_FALSE

VARIANT_FALSE

VARIANT_FALSE

VARIANT_FALSE

VARIANT_FALSE

PRZESZUKIWANIE

DB_SEARCHABLE

DB_SEARCHABLE

DB_SEARCHABLE

DB_SEARCHABLE

DB_SEARCHABLE

DB_SEARCHABLE

UNSIGNED_ATTRIBUTE

NULL

NULL

NULL

NULL

NULL

NULL

FIXED_PREC_SCALE

VARIANT_FALSE

VARIANT_FALSE

VARIANT_FALSE

VARIANT_FALSE

VARIANT_FALSE

VARIANT_FALSE

AUTO_UNIQUE_VALUE

VARIANT_FALSE

VARIANT_FALSE

VARIANT_FALSE

VARIANT_FALSE

VARIANT_FALSE

VARIANT_FALSE

LOCAL_TYPE_NAME

data

godzina

smalldatetime

data_i_godzina

datetime2

datetimeoffset

MINIMUM_SCALE

NULL

NULL

NULL

NULL

NULL

NULL

MAXIMUM_SCALE

NULL

NULL

NULL

NULL

NULL

NULL

IDENTYFIKATOR GUID

NULL

NULL

NULL

NULL

NULL

NULL

SEKCJI TYPELIB.

NULL

NULL

NULL

NULL

NULL

NULL

WERSJA

NULL

NULL

NULL

NULL

NULL

NULL

IS_LONG

VARIANT_FALSE

VARIANT_FALSE

VARIANT_FALSE

VARIANT_FALSE

VARIANT_FALSE

VARIANT_FALSE

BEST_MATCH

VARIANT_FALSE

VARIANT_FALSE

VARIANT_FALSE

WARTOŚĆ INNA NIŻ VARIANT_TRUE

VARIANT_FALSE

VARIANT_FALSE

IS_FIXEDLENGTH

VARIANT_FALSE

VARIANT_FALSE

VARIANT_FALSE

VARIANT_FALSE

VARIANT_FALSE

VARIANT_FALSE

Zachowanie serwerowe niskiego poziomu

Po podłączeniu do serwera w wersja starszej niż SQL Server 2008, próby Użyj nowej nazwy typu serwera (na przykład z ICommandWithParameters::SetParameterInfo lub ITableDefinition::CreateTable), spowoduje DB_E_BADTYPENAME.

Jeśli dla parametrów lub wyniki związane są nowe typy bez użycia nazwy typu i albo nowy typ pozwala określić typ serwera niejawnie lub nie jest prawidłową konwersji z typu serwera typu klientaZwrócone DB_E_ERRORSOCCURRED i DBBINDSTATUS_UNSUPPORTED_CONVERSION jest zestaw jako stan powiązanie dla akcesora na wykonanie.

Jeśli konwersja klient obsługiwany typ buforu na typ serwera dla wersja serwera połączenia można wszystkie typy buforu klienta.W tym kontekście Typ serwera oznacza typ określony przez ICommandWithParameters::SetParameterInfo, lub implikowana przez typ buforu, jeśli ICommandWithParameters::SetParameterInfo nie została wywołana.Oznacza to, że DBTYPE_DBTIME2 i DBTYPE_DBTIMESTAMPOFFSET mogą być używane z niedziałający-serwery, poziom lub po DataTypeCompatibility = 80, jeśli konwersja klient z typem obsługiwanym serwerze powiedzie się.Oczywiście jeśli typ serwera jest niepoprawny, błąd może nadal zgłaszane przez serwer, jeśli nie może wykonywać niejawna konwersja typu serwera rzeczywiste.

SSPROP_INIT_DATATYPECOMPATIBILITY zachowanie

Gdy SSPROP_INIT_DATATYPECOMPATIBILITY jest ustawiona na SSPROPVAL_DATATYPECOMPATIBILITY_SQL2000, nową datę /czas typów i metadane skojarzone widoczny dla klientów pojawiających się w przypadku klientów niskiego poziomu, jak opisano w Zmiany kopii zbiorczego dla typów Enhanced Data/Godzina (OLE DB i ODBC).

Porównywalność dla IRowsetFind

Wszystkie operatory porównania są dozwolone dla nowej daty /czas typy, ponieważ pojawiają się jako ciąg typów niż data /czas typów.

Zobacz także

Koncepcje