Conversioni eseguite da client a server
In questo argomento vengono illustrate le conversioni di data/ora eseguite tra un'applicazione client scritta con OLE DB di SQL Server Native Client e SQL Server 2008 (o versione successiva).
Conversioni
In questo argomento vengono descritte le conversioni eseguite sul client. Se il client specifica una precisione frazionaria dei secondi per un parametro che differisce da quella definita nel server, la conversione client potrebbe comportare un errore nei casi in cui il server consentirebbe l'esecuzione dell'operazione. In particolare, il client tratta come errore qualsiasi troncamento dei secondi frazionari, mentre SQL Server arrotonda valori al secondo intero più vicino.
Se ICommandWithParameters::SetParameterInfo non viene chiamato, le associazioni DBTYPE_DBTIMESTAMP vengono convertite come se fossero datetime2.
A -> Da |
DBDATE (date) |
DBTIME (time) |
DBTIME2 (time) |
DBTIMESTAMP (smalldatetime) |
DBTIMESTAMP (datetime) |
DBTIMESTAMP (datetime2) |
DBTIMESTAMPOFFSET (datetimeoffset) |
STR |
WSTR |
SQLVARIANT (sql_variant) |
---|---|---|---|---|---|---|---|---|---|---|
DATE |
1,2 |
1,3,4 |
4,12 |
1,12 |
1,12 |
1,12 |
1,5, 12 |
1,12 |
1,12 |
1,12 datetime2(0) |
DBDATE |
1 |
- |
- |
1,6 |
1,6 |
1,6 |
1,5, 6 |
1,10 |
1,10 |
1 date |
DBTIME |
- |
1 |
1 |
1,7 |
1,7 |
1,7 |
1,5, 7 |
1,10 |
1,10 |
1 Time(0) |
DBTIME2 |
- |
1,3 |
1 |
1,7,10,14 |
1,7,10,15 |
1,7,10 |
1,5,7,10 |
1,10,11 |
1,10,11 |
1 Time(7) |
DBTIMESTAMP |
1,2 |
1,3,4 |
1,4,10 |
1,10,14 |
1,10,15 |
1,10 |
1,5,10 |
1,10,11 |
1,10,11 |
1,10 datetime2(7) |
DBTIMESTAMPOFFSET |
1,2,8 |
1,3,4,8 |
1,4,8,10 |
1,8,10,14 |
1,8,10,15 |
1,8,10 |
1,10 |
1,10,11 |
1,10,11 |
1,10 datetimeoffset(7) |
FILETIME |
1,2 |
1,3,4 |
1,4,13 |
1,13 |
1,13 |
1,13 |
1,5,13 |
1,13 |
1,10 |
1,13 datetime2(3) |
BYTES |
- |
- |
- |
- |
- |
- |
- |
N/D |
N/D |
N/D |
VARIANT |
1 |
1 |
1 |
1,10 |
1,10 |
1,10 |
1,10 |
N/D |
N/D |
1,10 |
SSVARIANT |
1,16 |
1,16 |
1,16 |
1,10,16 |
1,10,16 |
1,10,16 |
1,10,16 |
N/D |
N/D |
1,16 |
BSTR |
1,9 |
1,9 |
1,9,10 |
1,9,10 |
1,9,10 |
1,9,10 |
1,9,10 |
N/D |
N/D |
N/D |
STR |
1,9 |
1,9 |
1,9,10 |
1,9,10 |
1,9,10 |
1,9,10 |
1,9,10 |
N/D |
N/D |
N/D |
WSTR |
1,9 |
1,9 |
1,9,10 |
1,9,10 |
1,9,10 |
1,9,10 |
1,9,10 |
N/D |
N/D |
N/D |
Descrizione dei simboli
Simbolo |
Significato |
---|---|
- |
Non viene supportata alcuna conversione. Se l'associazione viene convalidata quando viene chiamato IAccessor::CreateAccessor, viene restituito DBBINDSTATUS_UPSUPPORTEDCONVERSION in rgStatus. Quando la convalida della funzione di accesso viene rinviata, viene impostato DBSTATUS_E_BADACCESSOR. |
N/D |
Non applicabile. |
1 |
Se i dati forniti non sono validi, viene impostato DBSTATUS_E_CANTCONVERTVALUE. I dati di input vengono convalidati prima che vengano applicate le conversioni, pertanto quando un componente verrà ignorato da una conversione successiva, dovrà ancora essere valido per consentire la conversione. |
2 |
I campi relativi all'ora vengono ignorati. |
3 |
I secondi frazionari devono essere zero. In caso contrario, viene impostato DBSTATUS_E_DATAOVERFLOW. |
4 |
Il componente di data viene ignorato. |
5 |
Il fuso orario viene impostato sul fuso orario del client. |
6 |
L'ora viene impostata su zero. |
7 |
La data viene impostata sul valore corrente. |
8 |
L'ora viene convertita in formato UTC. Se si verifica un errore durante questa conversione, viene impostato DBSTATUS_E_CANTCONVERTVALUE. |
9 |
La stringa viene analizzata come valore letterale ISO e convertita nel tipo di destinazione. Se l'operazione non riesce, la stringa viene analizzata come valore letterale data OLE (che presenta anche componenti di ora) e convertita da data OLE (DBTYPE_DATE) nel tipo di destinazione. Se il tipo di destinazione è DBTIMESTAMP, smalldatetime, datetime o datetime2, la stringa deve essere conforme alla sintassi per i valori letterali data, ora o datetime2 o alla sintassi riconosciuta da OLE. Se la stringa è un valore letterale data, tutti i componenti di ora vengono impostati su zero. Se la stringa è un valore letterale ora, la data viene impostata sul valore corrente. Per tutti gli altri tipi di destinazione, la stringa deve essere conforme alla sintassi per i valori letterali del tipo di destinazione. |
10 |
In caso di troncamento dei secondi frazionari con perdita di dati, viene impostato DBSTATUS_E_DATAOVERFLOW. Per le conversioni di stringhe, il controllo dell'overflow è possibile solo quando la stringa è conforme alla sintassi ISO. Se la stringa è un valore letterale data OLE, i secondi frazionari vengono arrotondati. Per le conversioni di dati di tipo DBTIMESTAMP (datetime) in dati di tipo smalldatetime di SQL Server Native Client, viene troncato automaticamente il valore dei secondi anziché generare l'errore DBSTATUS_E_DATAOVERFLOW. |
11 |
Il numero di cifre per i secondi frazionari (scala) è determinato dalla dimensione della colonna di destinazione in base alla tabella seguente: Per le dimensioni di colonna maggiori dell'intervallo specificato nella tabella, si presuppone una scala di 9. Questa conversione deve consentire fino a nove cifre per i secondi frazionari, il massimo consentito da OLE DB. Se tuttavia il tipo di origine è DBTIMESTAMP e i secondi frazionari corrispondono a zero, non vengono generati alcuna cifra per i secondi frazionari né il separatore decimale. Questo comportamento assicura la compatibilità con le versioni precedenti per le applicazioni sviluppate utilizzando provider OLE DB meno recenti. Una dimensione di colonna pari a ~ 0 implica una dimensione illimitata in OLE DB (9 cifre, a meno che non si applichi la regola delle 3 cifre per DBTIMESTAMP).
TipoLunghezza (in caratteri)Scala
DBTIME28, 10..180,1..9
DBTIMESTAMP19, 21..290,1..9
DBTIMESTAMPOFFSET26, 28..360,1..9
|
12 |
Viene mantenuta la semantica di conversione precedente a SQL Server 2008 per DBTYPE_DATE. I secondi frazionari vengono troncati in corrispondenza di zero. |
13 |
Viene mantenuta la semantica di conversione precedente a SQL Server 2008 per DBTYPE_FILETIME. Se si utilizza l'API FileTimeToSystemTime di Windows, la precisione frazionaria dei secondi è limitata a 1 millisecondo. |
14 |
Viene mantenuta la semantica di conversione precedente a SQL Server 2008 per smalldatetime. I secondi vengono impostati su 0. |
15 |
Viene mantenuta la semantica di conversione precedente a SQL Server 2008 per datetime. I secondi vengono arrotondati al 300° di secondo più prossimo. |
16 |
Il comportamento di conversione di un valore (di un tipo specificato) incorporato in una struttura client SSVARIANT corrisponde al comportamento dello stesso valore e tipo quando non è incorporato in una struttura client SSVARIANT. |