Metadati per parametri e set di righe
In questo argomento vengono fornite informazioni sul tipo e sui membri di tipo seguenti, relativi alle funzionalità avanzate di data e ora OLE DB per SQL Server 2008.
Struttura DBBINDING
ICommandWithParameters::GetParameterInfo
ICommandWithParameters::SetParameterInfo
IColumnsRowset::GetColumnsRowset
IColumnsInfo::GetColumnInfo
ICommandWithParameters::GetParameterInfo
Le informazioni seguenti vengono restituite nella struttura DBPARAMINFO tramite prgParamInfo:
Tipo di parametro |
wType |
ulParamSize |
bPrecision |
bScale |
dwFlags DBPARAMFLAGS_SS_ISVARIABLESCALE |
---|---|---|---|---|---|
date |
DBTYPE_DBDATE |
6 |
10 |
0 |
Cancellato |
time |
DBTYPE_DBTIME2 |
10 |
8, 10..16 |
0..7 |
Impostato |
smalldatetime |
DBTYPE_DBTIMESTAMP |
16 |
16 |
0 |
Cancellato |
datetime |
DBTYPE_DBTIMESTAMP |
16 |
23 |
3 |
Cancellato |
datetime2 |
DBTYPE_DBTIMESTAMP |
16 |
19,21..27 |
0..7 |
Impostato |
datetimeoffset |
DBTYPE_DBTIMESTAMPOFFSET |
20 |
26,28..34 |
0..7 |
Impostato |
Tenere presente che in alcuni casi gli intervalli di valori non sono continui a causa dell'aggiunta di un separatore decimale quando la precisione frazionaria è maggiore di zero.
DBPARAMFLAGS_SS_ISVARIABLESCALE è valido solo se si è connessi a un server SQL Server 2008. DBPARAMFLAGS_SS_ISVARIABLESCALE non viene mai impostato quando si è connessi a server legacy.
ICommandWithParameters::SetParameterInfo e tipi di parametri impliciti
Le informazioni specificate nella struttura DBPARAMBINDINFO devono essere conformi agli elementi seguenti:
pwszDataSourceType (specifico del provider) |
pwszDataSourceType (generico di OLE DB) |
ulParamSize |
bScale |
---|---|---|---|
|
DBTYPE_DATE |
6 |
Ignorato |
date |
DBTYPE_DBDATE |
6 |
Ignorato |
|
DBTYPE_DBTIME |
10 |
Ignorato |
time |
DBTYPE_DBTIME2 |
10 |
0..7 |
smalldatetime |
|
16 |
Ignorato |
datetime |
|
16 |
Ignorato |
datetime2 o DBTYPE_DBTIMESTAMP |
DBTYPE_DBTIMESTAMP |
16 |
0..7 |
datetimeoffset |
DBTYPE_DBTIMESTAMPOFFSET |
20 |
0..7 |
Il parametro bPrecision viene ignorato.
"DBPARAMFLAGS_SS_ISVARIABLESCALE" viene ignorato in caso di invio di dati al server. Le applicazioni possono forzare l'utilizzo di tipi di flusso TDS (Tabular-Data Stream) legacy utilizzando i nomi di tipo specifici del provider "datetime" e "smalldatetime". Se si è connessi a server SQL Server 2008 o versione successiva, viene utilizzato il formato "datetime2" e si verifica una conversione server implicita, se necessaria, se il nome di tipo è "datetime2" o "DBTYPE_DBTIMESTAMP". bScale viene ignorato se vengono utilizzati i nomi di tipo specifici del provider "datetime" o "smalldatetime". In caso contrario, è necessario verificare che bScale sia impostato correttamente nelle applicazioni. Nelle applicazioni aggiornate da MDAC e in SQL Server Native Client aggiornato da SQL Server 2005 che utilizzano "DBTYPE_DBTIMESTAMP" si verificherà un errore se bScale non viene impostato correttamente. In caso di connessione a istanze server precedenti a SQL Server 2008, un valore di bScale diverso da 0 o 3 con "DBTYPE_DBTIMESTAMP" rappresenta un errore che comporta la restituzione di E_FAIL.
Quando non viene chiamato ICommandWithParameters::SetParameterInfo, il provider ricava il tipo di server dal tipo di associazione specificato in IAccessor::CreateAccessor nel modo seguente:
Tipo di associazione |
pwszDataSourceType (specifico del provider) |
---|---|
DBTYPE_DATE |
datetime2(0) |
DBTYPE_DBDATE |
date |
DBTYPE_DBTIME |
time(0) |
DBTYPE_DBTIME2 |
time(7) |
DBTYPE_DBTIMESTAMP |
datetime2(7) |
DBTYPE_DBTIMESTAMPOFFSET |
datetimeoffset(7) |
IColumnsRowset::GetColumnsRowset
IColumnsRowset::GetColumnsRowset restituisce le colonne seguenti:
Tipo di colonna |
DBCOLUMN_TYPE |
DBCOLUM_COLUMNSIZE |
DBCOLUMN_PRECISION |
DBCOLUMN_SCALE, DBCOLUMN_DATETIMEPRECISION |
DBCOLUMN_FLAGS, DBCOLUMNFLAGS_SS_ISVARIABLESCALE |
---|---|---|---|---|---|
date |
DBTYPE_DBDATE |
6 |
10 |
0 |
Cancellato |
time |
DBTYPE_DBTIME2 |
10 |
8, 10..16 |
0..7 |
Impostato |
smalldatetime |
DBTYPE_DBTIMESTAMP |
16 |
16 |
0 |
Cancellato |
datetime |
DBTYPE_DBTIMESTAMP |
16 |
23 |
3 |
Cancellato |
datetime2 |
DBTYPE_DBTIMESTAMP |
16 |
19, 21..27 |
0..7 |
Impostato |
datetimeoffset |
DBTYPE_DBTIMESTAMPOFFSET |
20 |
26, 28..34 |
0..7 |
Impostato |
In DBCOLUMN_FLAGS il valore di DBCOLUMNFLAGS_ISFIXEDLENGTH è sempre true per i tipi date/time e il valore dei flag seguenti è sempre false:
DBCOLUMNFLAGS_CACHEDEFERRED
DBCOLUMNFLAGS_ISBOOKMARK
DBCOLUMNFLAGS_ISCHAPTER
DBCOLUMNFLAGS_ISLONG
DBCOLUMNFLAGS_ISROWID
DBCOLUMNFLAGS_ISROWVER
DBCOLUMNFLAGS_MAYDEFER
I flag restanti (DBCOLUMNFLAGS_ISNULLABLE, DBCOLUMNFLAGS_MAYBENULL, DBCOLUMNFLAGS_WRITE e DBCOLUMNFLAGS_WRITEUNKNOWN) possono essere impostati in base alla modalità di definizione della colonna e alla query effettiva.
In DBCOLUMN_FLAGS è disponibile un nuovo flag DBCOLUMNFLAGS_SS_ISVARIABLESCALE che consente di determinare il tipo di server delle colonne nelle applicazioni, dove DBCOLUMN_TYPE è DBTYPE_DBTIMESTAMP. Per identificare il tipo di server è necessario utilizzare anche DBCOLUMN_SCALE o DBCOLUMN_DATETIMEPRECISION.
DBCOLUMNFLAGS_SS_ISVARIABLESCALE è valido solo quando si è connessi a un server SQL Server 2008. DBCOLUMNFLAGS_SS_ISVARIABLESCALE non è definito quando si è connessi a server legacy.
IColumnsInfo::GetColumnInfo
La struttura DBCOLUMNINFO restituisce le informazioni seguenti:
Tipo di parametro |
wType |
ulColumnSize |
bPrecision |
bScale |
dwFlags DBPARAMFLAGS_SS_ISVARIABLESCALE |
---|---|---|---|---|---|
date |
DBTYPE_DBDATE |
6 |
10 |
0 |
Cancellato |
time(1..7) |
DBTYPE_DBTIME2 |
10 |
8, 10..16 |
0..7 |
Impostato |
smalldatetime |
DBTYPE_DBTIMESTAMP |
16 |
16 |
0 |
Cancellato |
datetime |
DBTYPE_DBTIMESTAMP |
16 |
23 |
3 |
Cancellato |
datetime2 |
DBTYPE_DBTIMESTAMP |
16 |
19, 21..27 |
0..7 |
Impostato |
datetimeoffset |
DBTYPE_DBTIMESTAMPOFFSET |
20 |
26, 28..34 |
0..7 |
Impostato |
In dwFlags il valore di DBCOLUMNFLAGS_ISFIXEDLENGTH è sempre true per i tipi date/time e il valore dei flag seguenti è sempre false:
DBCOLUMNFLAGS_CACHEDEFERRED
DBCOLUMNFLAGS_ISBOOKMARK
DBCOLUMNFLAGS_ISCHAPTER
DBCOLUMNFLAGS_ISLONG
DBCOLUMNFLAGS_ISROWID
DBCOLUMNFLAGS_ISROWVER, MAYDEFER
I flag restanti (DBCOLUMNFLAGS_ISNULLABLE, DBCOLUMNFLAGS_MAYBENULL, DBCOLUMNFLAGS_WRITE e DBCOLUMNFLAGS_WRITEUNKNOWN) possono essere impostati.
In dwFlags è disponibile un nuovo flag DBCOLUMNFLAGS_SS_ISVARIABLESCALE che consente di determinare il tipo di server delle colonne nelle applicazioni, dove wType è DBTYPE_DBTIMESTAMP. Per identificare il tipo di server è necessario utilizzare anche bScale.