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

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.

Siehe auch

Konzepte