Freigeben über


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
Datum DBTYPE_DBDATE 6 10 0 Klar
Zeit DBTYPE_DBTIME2 10 8, 10..16 0..7 Garnitur
smalldatetime DBTYPE_DBTIMESTAMP 16 16 0 Klar
Datum/Uhrzeit DBTYPE_DBTIMESTAMP 16 23 3 Klar
datetime2 DBTYPE_DBTIMESTAMP 16 19,21..27 0..7 Garnitur
datetimeoffset DBTYPE_DBTIMESTAMPOFFSET 20 26,28..34 0..7 Garnitur

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) hergestellt wird. 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.
Datum DBTYPE_DBDATE 6 Wird ignoriert.
DBTYPE_DBTIME 10 Wird ignoriert.
Zeit DBTYPE_DBTIME2 10 0..7
smalldatetime 16 Wird ignoriert.
Datum/Uhrzeit 16 Wird ignoriert.
datetime2 oder DBTYPE_DBTIMESTAMP DBTYPE_DBTIMESTAMP 16 0..7
datetimeoffset DBTYPE_DBTIMESTAMPOFFSET 20 0..7

Der Parameter bPrecision wird ignoriert.

Beim Senden von Daten an den Server wird DBPARAMFLAGS_SS_ISVARIABLESCALE ignoriert. Anwendungen können die Verwendung von älteren Tabellardatenstromtypen (TDS) erzwingen, indem sie die anbieterspezifischen Typnamen "datetime" und "smalldatetime" verwenden. Wenn eine Verbindung mit SQL Server 2008 -Servern (oder höher) hergestellt wird, wird das Format "datetime2" verwendet, und bei Bedarf erfolgt eine implizite Serverkonvertierung, wenn der Typname "datetime2" oder "DBTYPE_DBTIMESTAMP" ist. bScale wird ignoriert, wenn die anbieterspezifischen Typnamen "datetime" oder "smalldatetime" verwendet werden. Andernfalls müssen Appications sicherstellen, dass bScale ordnungsgemäß festgelegt ist. Anwendungen, die von MDAC und SQL Server Native Client von SQL Server 2005 aktualisiert wurden, die "DBTYPE_DBTIMESTAMP" verwenden, schlagen fehl, wenn sie bScale nicht ordnungsgemäß festlegen. Wenn eine Verbindung mit Serverinstanzen vor SQL Server 2008 hergestellt wird, wird ein anderer bScale-Wert als 0 oder 3 mit "DBTYPE_DBTIMESTAMP" ein Fehler und E_FAIL zurückgegeben.

Wenn "ICommandWithParameters::SetParameterInfo" nicht aufgerufen wird, setzt der Anbieter den Servertyp aus dem Bindungstyp ein, wie in IAccessor::CreateAccessor angegeben:

Bindungstyp pwszDataSourceType

(anbieterspezifisch)
DBTYPE_DATE datetime2(0)
DBTYPE_DBDATE Datum
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:

Spaltenart DBCOLUMN_TYPE DBCOLUM_COLUMNSIZE DBCOLUMN_PRECISION DBCOLUMN_SCALE, DBCOLUMN_DATETIMEPRECISION DBCOLUMN_FLAGS, DBCOLUMNFLAGS_SS_ISVARIABLESCALE
Datum DBTYPE_DBDATE 6 10 0 Klar
Zeit DBTYPE_DBTIME2 10 8, 10..16 0..7 Garnitur
smalldatetime DBTYPE_DBTIMESTAMP 16 16 0 Klar
Datum/Uhrzeit DBTYPE_DBTIMESTAMP 16 23 3 Klar
datetime2 DBTYPE_DBTIMESTAMP 16 19, 21..27 0..7 Garnitur
datetimeoffset DBTYPE_DBTIMESTAMPOFFSET 20 26, 28..34 0..7 Garnitur

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) hergestellt wird. 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
Datum DBTYPE_DBDATE 6 10 0 Klar
time(1...7) DBTYPE_DBTIME2 10 8, 10..16 0..7 Garnitur
smalldatetime DBTYPE_DBTIMESTAMP 16 16 0 Klar
Datum/Uhrzeit DBTYPE_DBTIMESTAMP 16 23 3 Klar
datetime2 DBTYPE_DBTIMESTAMP 16 19, 21..27 0..7 Garnitur
datetimeoffset DBTYPE_DBTIMESTAMPOFFSET 20 26, 28..34 0..7 Garnitur

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.

In dwFlags wird das neue Flag DBCOLUMNFLAGS_SS_ISVARIABLESCALE bereitgestellt, mit dem eine Anwendung den Servertyp von Spalten bestimmen kann, wobei wType DBTYPE_DBTIMESTAMP ist. bScale muss ebenfalls verwendet werden, um den Servertyp zu identifizieren.

Siehe auch

Metadaten (OLE DB)