Metadaten für Parameter und Rowsets
Dieses Thema enthält Informationen über den folgenden Typ und die folgenden Typelemente in Verbindung mit den OLE DB-Datums- und Uhrzeitverbesserungen.
DBBINDING-Struktur
ICommandWithParameters::GetParameterInfo
ICommandWithParameters::SetParameterInfo
IColumnsRowset::GetColumnsRowset
IColumnsInfo::GetColumnInfo
ICommandWithParameters::GetParameterInfo
Die folgenden Informationen werden in der DBPARAMINFO-Struktur durch prgParamInfo zurückgegeben:
Parametertyp |
wType |
ulParamSize |
bPrecision |
bScale |
dwFlags DBPARAMFLAGS_SS_ISVARIABLESCALE |
---|---|---|---|---|---|
date |
DBTYPE_DBDATE |
6 |
10 |
0 |
Clear |
time |
DBTYPE_DBTIME2 |
10 |
8, 10..16 |
0..7 |
Set |
smalldatetime |
DBTYPE_DBTIMESTAMP |
16 |
16 |
0 |
Clear |
datetime |
DBTYPE_DBTIMESTAMP |
16 |
23 |
3 |
Clear |
datetime2 |
DBTYPE_DBTIMESTAMP |
16 |
19,21..27 |
0..7 |
Set |
datetimeoffset |
DBTYPE_DBTIMESTAMPOFFSET |
20 |
26,28..34 |
0..7 |
Set |
Beachten Sie, dass in einigen Fällen Wertbereiche nicht kontinuierlich sind. Der Grund dafür ist das Hinzufügen eines Dezimaltrennzeichens, wenn die Genauigkeit von Bruchteilen größer als 0 (NULL) ist.
DBPARAMFLAGS_SS_ISVARIABLESCALE ist nur gültig, wenn eine Verbindung mit einem SQL Server 2008-Server (oder höher) besteht. Bei einer Verbindung mit einem Downlevelserver ist DBPARAMFLAGS_SS_ISVARIABLESCALE nie festgelegt.
ICommandWithParameters::SetParameterInfo und implizite Parametertypen
Die in der DBPARAMBINDINFO-Struktur bereitgestellten Informationen müssen Folgendem entsprechen:
pwszDataSourceType (anbieterspezifisch) |
pwszDataSourceType (OLE DB-generisch) |
ulParamSize |
bScale |
---|---|---|---|
|
DBTYPE_DATE |
6 |
Wird ignoriert. |
date |
DBTYPE_DBDATE |
6 |
Wird ignoriert. |
|
DBTYPE_DBTIME |
10 |
Wird ignoriert. |
time |
DBTYPE_DBTIME2 |
10 |
0..7 |
smalldatetime |
|
16 |
Wird ignoriert. |
datetime |
|
16 |
Wird ignoriert. |
datetime2 oder DBTYPE_DBTIMESTAMP |
DBTYPE_DBTIMESTAMP |
16 |
0..7 |
datetimeoffset |
DBTYPE_DBTIMESTAMPOFFSET |
20 |
0..7 |
Der bPrecision-Parameter wird ignoriert.
Beim Senden von Daten an den Server wird DBPARAMFLAGS_SS_ISVARIABLESCALE ignoriert. Anwendungen können die Verwendung von älteren TDS-Typen (Tabular Data Stream) durch Verwenden der anbieterspezifischen Typnamen "datetime" und "smalldatetime" erzwingen. Bei einer Verbindung mit SQL Server 2008-Servern (oder späteren Versionen) wird das "datetime2"-Format verwendet und eine implizite Serverkonvertierung wird durchgeführt, sofern erforderlich, wenn der Typname "datetime2" oder "DBTYPE_DBTIMESTAMP" lautet. bScale wird ignoriert, wenn der anbieterspezifische Typname "datetime" oder "smalldatetime" verwendet wird. Andernfalls müssen Anwendungen sicherstellen, dass bScale ordnungsgemäß festgelegt wird. Anwendungen, die von MDAC und SQL Server Native Client von SQL Server 2005 aktualisiert wurden und "DBTYPE_DBTIMESTAMP" verwenden, schlagen fehl, wenn sie bScale nicht ordnungsgemäß festlegen. Bei Verbindung mit Serverinstanzen vor SQL Server 2008 tritt für einen anderen bScale-Wert als 0 oder 3 mit "DBTYPE_DBTIMESTAMP" ein Fehler auf und E_FAIL wird zurückgegeben.
Wenn ICommandWithParameters::SetParameterInfo nicht aufgerufen wird, leitet der Anbieter den Servertyp vom Bindungstyp, wie in IAccessor::CreateAccessor angegeben, wie folgt ab:
Bindungstyp |
pwszDataSourceType (anbieterspezifisch) |
---|---|
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 gibt die folgenden Spalten zurück.
Spaltentyp |
DBCOLUMN_TYPE |
DBCOLUM_COLUMNSIZE |
DBCOLUMN_PRECISION |
DBCOLUMN_SCALE, DBCOLUMN_DATETIMEPRECISION |
DBCOLUMN_FLAGS, DBCOLUMNFLAGS_SS_ISVARIABLESCALE |
---|---|---|---|---|---|
date |
DBTYPE_DBDATE |
6 |
10 |
0 |
Clear |
time |
DBTYPE_DBTIME2 |
10 |
8, 10..16 |
0..7 |
Set |
smalldatetime |
DBTYPE_DBTIMESTAMP |
16 |
16 |
0 |
Clear |
datetime |
DBTYPE_DBTIMESTAMP |
16 |
23 |
3 |
Clear |
datetime2 |
DBTYPE_DBTIMESTAMP |
16 |
19, 21..27 |
0..7 |
Set |
datetimeoffset |
DBTYPE_DBTIMESTAMPOFFSET |
20 |
26, 28..34 |
0..7 |
Set |
In DBCOLUMN_FLAGS hat DBCOLUMNFLAGS_ISFIXEDLENGTH für Datum-/Uhrzeit-Typen stets den Wert TRUE, und die folgenden Flags haben immer den Wert FALSE:
DBCOLUMNFLAGS_CACHEDEFERRED
DBCOLUMNFLAGS_ISBOOKMARK
DBCOLUMNFLAGS_ISCHAPTER
DBCOLUMNFLAGS_ISLONG
DBCOLUMNFLAGS_ISROWID
DBCOLUMNFLAGS_ISROWVER
DBCOLUMNFLAGS_MAYDEFER
Die übrigen Flags (DBCOLUMNFLAGS_ISNULLABLE, DBCOLUMNFLAGS_MAYBENULL, DBCOLUMNFLAGS_WRITE und DBCOLUMNFLAGS_WRITEUNKNOWN) können festgelegt werden. Dies hängt von der Definition der Spalte und von der eigentlichen Abfrage ab.
Ein DBCOLUMNFLAGS_SS_ISVARIABLESCALE-Flag wird in DBCOLUMN_FLAGS zur Verfügung gestellt, damit eine Anwendung den Servertyp der Spalten bestimmen kann, wobei DBCOLUMN_TYPE DBTYPE_DBTIMESTAMP ist. DBCOLUMN_SCALE oder DBCOLUMN_DATETIMEPRECISION muss auch verwendet werden, um den Servertyp zu identifizieren.
DBCOLUMNFLAGS_SS_ISVARIABLESCALE ist nur gültig, wenn eine Verbindung mit einem SQL Server 2008-Server (oder höher) besteht. DBPARAMFLAGS_SS_ISVARIABLESCALE ist nicht definiert, wenn eine Verbindung mit einem Downlevelserver besteht.
IColumnsInfo::GetColumnInfo
Die DBCOLUMNINFO-Struktur gibt die folgenden Informationen zurück:
Parametertyp |
wType |
ulColumnSize |
bPrecision |
bScale |
dwFlags DBPARAMFLAGS_SS_ISVARIABLESCALE |
---|---|---|---|---|---|
date |
DBTYPE_DBDATE |
6 |
10 |
0 |
Clear |
time(1..7) |
DBTYPE_DBTIME2 |
10 |
8, 10..16 |
0..7 |
Set |
smalldatetime |
DBTYPE_DBTIMESTAMP |
16 |
16 |
0 |
Clear |
datetime |
DBTYPE_DBTIMESTAMP |
16 |
23 |
3 |
Clear |
datetime2 |
DBTYPE_DBTIMESTAMP |
16 |
19, 21..27 |
0..7 |
Set |
datetimeoffset |
DBTYPE_DBTIMESTAMPOFFSET |
20 |
26, 28..34 |
0..7 |
Set |
In dwFlags hat DBCOLUMNFLAGS_ISFIXEDLENGTH für Datum-/Uhrzeit-Typen stets den Wert TRUE, und die folgenden Flags haben immer den Wert FALSE:
DBCOLUMNFLAGS_CACHEDEFERRED
DBCOLUMNFLAGS_ISBOOKMARK
DBCOLUMNFLAGS_ISCHAPTER
DBCOLUMNFLAGS_ISLONG
DBCOLUMNFLAGS_ISROWID
DBCOLUMNFLAGS_ISROWVER, MAYDEFER
Die übrigen Flags (DBCOLUMNFLAGS_ISNULLABLE, DBCOLUMNFLAGS_MAYBENULL, DBCOLUMNFLAGS_WRITE und DBCOLUMNFLAGS_WRITEUNKNOWN) können festgelegt werden.
Ein neues DBCOLUMNFLAGS_SS_ISVARIABLESCALE-Flag wird in dwFlags zur Verfügung gestellt, damit eine Anwendung den Servertyp der Spalten bestimmen kann, wobei wType DBTYPE_DBTIMESTAMP ist. bScale muss ebenfalls verwendet werden, um den Servertyp zu identifizieren.