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.