Udostępnij przez


Nowa data / czas funkcje z poprzednich wersji programu SQL Server (OLE DB)

W tym temacie opisano oczekiwane zachowanie, gdy aplikacja klient, która używa rozszerzonego data i czas funkcji komunikuje się za pomocą wersja programu SQL Server starsze niż SQL Server 2008i gdy skompilowany z wersją klient SQL Server Macierzysta klient starsze niż SQL Server 2008 wysyła polecenia do serwera, który obsługuje rozszerzone data i czas funkcji.

Zachowanie klient poziom niedziałający

Aplikacje klienckie, które używają wersja programu SQL Server Macierzysta klient starsze niż SQL Server 2008 Zobacz typy nowe data i godziny jako nvarchar kolumny. Zawartość kolumna są liczbami w postaci literału.Aby uzyskać więcej informacji, zobacz temat "formatów danych: Ciągi i literały"sekcjiObsługa typu danych OLE DB Data/Godzina ulepszenia. Rozmiar kolumna jest maksymalna długość literału dokładność określona dla kolumna.

Katalog interfejsów API zwróci metadane zgodne z niedziałający-zwrócony do klient (na przykład, kod typu danych poziomu nvarchar) i skojarzonym niedziałający-poziom reprezentację (na przykład odpowiedni literału format). Jednak nazwa typu danych zwróconych będzie rzeczywistych SQL Server 2008 Nazwa typu.

Gdy aplikacja klient niższego poziom jest uruchamiana przed SQL Server 2008 serwer, na których zmiany schematu na datę / czas typów zostaną wprowadzone, oczekiwane zachowanie jest następująca:

Typ klient OLE DB

Typ programu SQL Server 2005

Typ programu SQL Server 2008

Wynik konwersji (serwera do klient)

Parametr konwersji (klient do serwera)

DBTYPE_DBDATE

Data i godzina

Data

OK

OK

DBTYPE_DBTIMESTAMP

Czas pól zestaw na zero.

IRowsetChange zakończy się niepowodzeniem ze względu na ciąg obcinania wtedy, gdy pole czas jest różna od zera.

DBTYPE_DBTIME

czas(0)

OK

OK

DBTYPE_DBTIMESTAMP

Data pola zestaw do bieżącej data.

IRowsetChange zakończy się niepowodzeniem ze względu na ciąg obcinania wtedy, gdy ułamków sekund są od zera.

Data jest ignorowana.

DBTYPE_DBTIME

czas(7)

Niepowodzenie — czas Nieprawidłowy literał.

OK

DBTYPE_DBTIMESTAMP

Niepowodzenie — czas Nieprawidłowy literał.

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 na zero.

IRowsetChange zakończy się niepowodzeniem ze względu na ciąg obcinania wtedy, gdy pole czas jest różna od zera.

DBTYPE_DBTIME

czas(0)

OK

OK

DBTYPE_DBTIMESTAMP

Data pola zestaw do bieżącej data.

IRowsetChange zakończy się niepowodzeniem ze względu na ciąg obcinania wtedy, gdy ułamków sekund są od zera.

Data jest ignorowana.

DBTYPE_DBTIMESTAMP

Datetime2(0)

OK

OK

OK oznacza, że jego pracy z SQL Server 2005, należy kontynuować pracę z SQL Server 2008.

Tylko następujące wspólnego schematu zmiany zostały uwzględnione:

  • Za pomocą nowego typu, w której logicznie aplikacja wymaga tylko datę lub czas wartości.Jednak aplikacja jest zmuszona do korzystania z datetime lub smalldatetime ponieważ oddzielne data i czas typów nie były dostępne.

  • Uzyskanie dokładność ułamkowa kilka sekund lub dokładności przy użyciu nowego typu.

  • Przełączanie do datetime2 ponieważ jest to typ danych preferowanej data i godziny.

Aplikacje używające uzyskanej za pomocą metadane serwera ICommandWithParameters::GetParameterInfo lub rowzestaws schematu do zestaw informacji o typie parametru za pomocą ICommandWithParameters::SetParameterInfo zakończy się niepowodzeniem podczas konwersji klient, których reprezentację ciągu typ urządzenie źródłowe jest większy niż ciąg znaków reprezentujący typu obiekt docelowy. Na przykład jeśli używa klienta wiązania DBTYPE_DBTIMESTAMP i kolumna serwera to data SQL ServerKlient macierzystym przekonwertuje wartość "hh:mm:ss.fff mm-dd rrrr", ale metadane serwera będą zwracane jako nvarchar(10). Przepełnienie wynikowy powoduje, że DBSTATUS_E_CATCONVERTVALUE.Podobne problemy z konwersji danych przez IRowsetChange, ponieważ ustawiono metadane zestaw wierszy z metadane resultset.

Parametr i metadane zestawu zestaw wierszy

W tej sekcji opisano metadane dla parametrów, wynik kolumn i wierszy schematu dla klientów, którzy są kompilowane za pomocą wersja programu SQL Server Macierzysta klient 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

Powiadomienie, że niektóre z nich zakresy wartości nie są stałe; na przykład 9 brakuje w 8 10..16.Jest to spowodowane dodanie przecinek dziesiętny podczas dokładność ułamkowa jest większa od zera.

IColumnsRowset::GetColumnsRowset

Zwracane są następujące kolumny:

Typ kolumna

DBCOLUMN_TYPE

DBCOLUMN_COLUMNSIZE

DBCOLUMN_PRECISION

DBCOLUMN_SCALE DBCOLUMN_DATETIMEPRECISION

data

DBTYPE_WSTR

10

WARTOŚCI NULL

WARTOŚCI NULL

godzina

DBTYPE_WSTR

8, 10..16

WARTOŚCI NULL

WARTOŚCI NULL

Smalldatetime

DBTYPE_DBTIMESTAMP

16

16

0

data_i_godzina

DBTYPE_DBTIMESTAMP

16

23

3

datetime2

DBTYPE_WSTR

19,21..27

WARTOŚCI NULL

WARTOŚCI NULL

datetimeoffset

DBTYPE_WSTR

26,28..34

WARTOŚCI NULL

WARTOŚCI 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 liczba.kolumn

Następujące wartości kolumn są zwracane dla daty / czas typów:

Typ kolumna

DATA_TYPE

CHARACTER_MAXIMUM_LENGTH

CHARACTER_OCTET_LENGTH

DATETIME_PRECISION

data

DBTYPE_WSTR

10

20

WARTOŚCI NULL

godzina

DBTYPE_WSTR

8, 10..16

16,20..32

WARTOŚCI NULL

Smalldatetime

DBTYPE_DBTIMESTAMP

WARTOŚCI NULL

WARTOŚCI NULL

0

data_i_godzina

DBTYPE_DBTIMESTAMP

WARTOŚCI NULL

WARTOŚCI NULL

3

datetime2

DBTYPE_WSTR

19,21..27

38,42..54

WARTOŚCI NULL

datetimeoffset

DBTYPE_WSTR

26,28..34

52, 56..68

WARTOŚCI NULL

Zestaw wierszy PROCEDURE_PARAMETERS

Następujące wartości kolumn są zwracane dla daty / czas typów:

Typ kolumna

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

WARTOŚCI NULL

WARTOŚCI NULL

Smalldatetime

data_i_godzina

DBTYPE_DBTIMESTAMP

WARTOŚCI NULL

WARTOŚCI NULL

data_i_godzina

datetime2

DBTYPE_WSTR

19,21..27

38,42..54

datetime2

datetimeoffset

DBTYPE_WSTR

26,28..34

52, 56..68

datetimeoffset

Zestaw wierszy PROVIDER_TYPES

Dla typu Data/Godzina, zwracane są następujące wiersze:

Type->

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

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

Precyzja (całkowita liczba cyfr).

VARIANT_TRUE

VARIANT_TRUE

VARIANT_TRUE

VARIANT_TRUE

VARIANT_TRUE

VARIANT_TRUE

CASE_SENSITIVE

VARIANT_FALSE

VARIANT_FALSE

VARIANT_FALSE

VARIANT_FALSE

VARIANT_FALSE

VARIANT_FALSE

MOŻNA WYSZUKIWAĆ

DB_SEARCHABLE

DB_SEARCHABLE

DB_SEARCHABLE

DB_SEARCHABLE

DB_SEARCHABLE

DB_SEARCHABLE

UNSIGNED_ATTRIBUTE

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI 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

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

MAXIMUM_SCALE

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

IDENTYFIKATOR GUID

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

BIBLIOTEKI TYPÓW

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

WERSJA

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

WARTOŚCI NULL

IS_LONG

VARIANT_FALSE

VARIANT_FALSE

VARIANT_FALSE

VARIANT_FALSE

VARIANT_FALSE

VARIANT_FALSE

BEST_MATCH

VARIANT_FALSE

VARIANT_FALSE

VARIANT_FALSE

VARIANT_TRUE

VARIANT_FALSE

VARIANT_FALSE

IS_FIXEDLENGTH

VARIANT_FALSE

VARIANT_FALSE

VARIANT_FALSE

VARIANT_FALSE

VARIANT_FALSE

VARIANT_FALSE

Zachowanie serwera poziom niedziałający

Gdy połączenie z serwerem ze starszej wersja niż SQL Server 2008, dowolne próbować używać nowych nazw typ serwera (na przykład z ICommandWithParameters::SetParameterInfo lub ITableDefinition::CreateTable) spowoduje DB_E_BADTYPENAME.

Powiązane nowe typy parametrów lub wyniki bez użycia nazwy typu i albo nowego typu jest używana do określenia, typ serwera niejawnie lub jest prawidłową konwersja z typu serwera nie typu klient, zwracana jest DB_E_ERRORSOCCURRED i DBBINDSTATUS_UNSUPPORTED_CONVERSION jest ustawiony jako stan wiązanie dla akcesora, użyty na wykonać.

Jeśli konwersja klient obsługiwany typ buforu na typ serwera dla serwera w wersja dla połączenia, wszystkie typy buforu klienta mogą być używane.W tym kontekście Typ serwera oznacza, typem wskazanym za pomocą 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-poziom serwery, lub gdy DataTypeCompatibility = 80, jeśli klient konwersja na typ obsługiwanych serwerowych powiedzie się.Oczywiście typu serwera jest nieprawidłowa, błąd może nadal być zgłoszone przez serwer nie może go wykonać niejawna konwersja typu rzeczywistego serwera.

Zachowanie SSPROP_INIT_DATATYPECOMPATIBILITY

Kiedy SSPROP_INIT_DATATYPECOMPATIBILITY jest ustawiony na wartość SSPROPVAL_DATATYPECOMPATIBILITY_SQL2000, nową datę / czas typów i metadane skojarzone widoczny dla klientów pojawiających się w przypadku klientów niskiego poziom, jak opisano w Zbiorcza Kopiuj zmiany dla daty rozszerzony / czas typy (OLE DB i ODBC).

Porównywalności dla IRowsetFind

Wszystkie operatory porównania są dozwolone dla typów nowe daty/godziny, ponieważ są one wyświetlane jako ciąg typów zamiast typu Data/Godzina.