参数和行集元数据
本主题提供了与 OLE DB 日期和时间增强功能相关的以下类型和类型成员的相关信息。
DBBINDING 结构
ICommandWithParameters::GetParameterInfo
ICommandWithParameters::SetParameterInfo
IColumnsRowset::GetColumnsRowset
IColumnsInfo::GetColumnInfo
ICommandWithParameters::GetParameterInfo
通过 prgParamInfo 在 DBPARAMINFO 结构中返回以下信息:
参数类型 |
wType |
ulParamSize |
bPrecision |
bScale |
dwFlags DBPARAMFLAGS_SS_ISVARIABLESCALE |
---|---|---|---|---|---|
date |
DBTYPE_DBDATE |
6 |
10 |
0 |
清除 |
time |
DBTYPE_DBTIME2 |
10 |
8, 10..16 |
0..7 |
设置 |
smalldatetime |
DBTYPE_DBTIMESTAMP |
16 |
16 |
0 |
清除 |
datetime |
DBTYPE_DBTIMESTAMP |
16 |
23 |
3 |
清除 |
datetime2 |
DBTYPE_DBTIMESTAMP |
16 |
19,21..27 |
0..7 |
设置 |
datetimeoffset |
DBTYPE_DBTIMESTAMPOFFSET |
20 |
26,28..34 |
0..7 |
设置 |
请注意,在某些情况下,值范围不是连续的。 这是因为当小数精度大于零时添加了小数点。
DBPARAMFLAGS_SS_ISVARIABLESCALE 只有在连接到 SQL Server 2008(或更高版本)服务器时才有效。 当连接到下级服务器时,永远不会设置 DBPARAMFLAGS_SS_ISVARIABLESCALE。
ICommandWithParameters::SetParameterInfo 和隐含的参数类型
在 DBPARAMBINDINFO 结构中提供的信息必须符合以下规定:
pwszDataSourceType (特定于访问接口) |
pwszDataSourceType (一般 OLE DB) |
ulParamSize |
bScale |
---|---|---|---|
|
DBTYPE_DATE |
6 |
忽略 |
date |
DBTYPE_DBDATE |
6 |
忽略 |
|
DBTYPE_DBTIME |
10 |
忽略 |
time |
DBTYPE_DBTIME2 |
10 |
0..7 |
smalldatetime |
|
16 |
忽略 |
datetime |
|
16 |
忽略 |
datetime2 或 DBTYPE_DBTIMESTAMP |
DBTYPE_DBTIMESTAMP |
16 |
0..7 |
datetimeoffset |
DBTYPE_DBTIMESTAMPOFFSET |
20 |
0..7 |
忽略 bPrecision 参数。
向服务器发送数据时将忽略“DBPARAMFLAGS_SS_ISVARIABLESCALE”。 通过使用特定于访问接口的类型名称 "datetime”和“smalldatetime”,应用程序可以强制使用旧的表格格式数据流 (TDS) 类型。 当连接到 SQL Server 2008(或更高版本)服务器时,如果类型名称为“datetime2”或“DBTYPE_DBTIMESTAMP”,将使用“datetime2”格式,并在必要时进行隐式服务器转换。 如果使用特定于访问接口的类型名称“datetime”或“smalldatetime”,则忽略 bScale。 否则,应用程序必须确保正确设置了 bScale。 对于使用“DBTYPE_DBTIMESTAMP”且从 MDAC 升级的应用程序和 SQL Server 2005 的 SQL Server Native Client,如果未正确设置 bScale,应用程序将失败。 当连接到早于 SQL Server 2008 的服务器实例时,采用“DBTYPE_DBTIMESTAMP”且值不为 0 或 3 的 bScale 值不正确,并且将返回 E_FAIL。
如果未调用 ICommandWithParameters::SetParameterInfo,访问接口将根据 IAccessor::CreateAccessor 中指定的绑定类型表示服务器类型,如下所示:
绑定类型 |
pwszDataSourceType (特定于访问接口) |
---|---|
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 返回以下各列:
列类型 |
DBCOLUMN_TYPE |
DBCOLUM_COLUMNSIZE |
DBCOLUMN_PRECISION |
DBCOLUMN_SCALE、DBCOLUMN_DATETIMEPRECISION |
DBCOLUMN_FLAGS、DBCOLUMNFLAGS_SS_ISVARIABLESCALE |
---|---|---|---|---|---|
date |
DBTYPE_DBDATE |
6 |
10 |
0 |
清除 |
time |
DBTYPE_DBTIME2 |
10 |
8, 10..16 |
0..7 |
设置 |
smalldatetime |
DBTYPE_DBTIMESTAMP |
16 |
16 |
0 |
清除 |
datetime |
DBTYPE_DBTIMESTAMP |
16 |
23 |
3 |
清除 |
datetime2 |
DBTYPE_DBTIMESTAMP |
16 |
19, 21..27 |
0..7 |
设置 |
datetimeoffset |
DBTYPE_DBTIMESTAMPOFFSET |
20 |
26, 28..34 |
0..7 |
设置 |
在 DBCOLUMN_FLAGS 中,对于日期/时间类型,DBCOLUMNFLAGS_ISFIXEDLENGTH 始终为 True,而下列标志则始终为 False:
DBCOLUMNFLAGS_CACHEDEFERRED
DBCOLUMNFLAGS_ISBOOKMARK
DBCOLUMNFLAGS_ISCHAPTER
DBCOLUMNFLAGS_ISLONG
DBCOLUMNFLAGS_ISROWID
DBCOLUMNFLAGS_ISROWVER
DBCOLUMNFLAGS_MAYDEFER
可根据列的定义方式和实际查询设置其余标志(DBCOLUMNFLAGS_ISNULLABLE、DBCOLUMNFLAGS_MAYBENULL、DBCOLUMNFLAGS_WRITE 和 DBCOLUMNFLAGS_WRITEUNKNOWN)。
DBCOLUMN_FLAGS 中提供了新的 DBCOLUMNFLAGS_SS_ISVARIABLESCALE 标志,以使应用程序可以确定列的服务器类型,其中 DBCOLUMN_TYPE 为 DBTYPE_DBTIMESTAMP。 还必须使用 DBCOLUMN_SCALE 或 DBCOLUMN_DATETIMEPRECISION 标识服务器类型。
仅当连接到 SQL Server 2008(或更高版本)服务器时 DBCOLUMNFLAGS_SS_ISVARIABLESCALE 才有效。 当连接到下级服务器时,未定义 DBCOLUMNFLAGS_SS_ISVARIABLESCALE。
IColumnsInfo::GetColumnInfo
DBCOLUMNINFO 结构返回以下信息:
参数类型 |
wType |
ulColumnSize |
bPrecision |
bScale |
dwFlags DBPARAMFLAGS_SS_ISVARIABLESCALE |
---|---|---|---|---|---|
date |
DBTYPE_DBDATE |
6 |
10 |
0 |
清除 |
time(1..7) |
DBTYPE_DBTIME2 |
10 |
8, 10..16 |
0..7 |
设置 |
smalldatetime |
DBTYPE_DBTIMESTAMP |
16 |
16 |
0 |
清除 |
datetime |
DBTYPE_DBTIMESTAMP |
16 |
23 |
3 |
清除 |
datetime2 |
DBTYPE_DBTIMESTAMP |
16 |
19, 21..27 |
0..7 |
设置 |
datetimeoffset |
DBTYPE_DBTIMESTAMPOFFSET |
20 |
26, 28..34 |
0..7 |
设置 |
在 dwFlags 中,对于日期/时间类型,DBCOLUMNFLAGS_ISFIXEDLENGTH 始终为 True,而下列标志则始终为 False:
DBCOLUMNFLAGS_CACHEDEFERRED
DBCOLUMNFLAGS_ISBOOKMARK
DBCOLUMNFLAGS_ISCHAPTER
DBCOLUMNFLAGS_ISLONG
DBCOLUMNFLAGS_ISROWID
DBCOLUMNFLAGS_ISROWVER、MAYDEFER
可以设置其余标志(DBCOLUMNFLAGS_ISNULLABLE、DBCOLUMNFLAGS_MAYBENULL、DBCOLUMNFLAGS_WRITE 和 DBCOLUMNFLAGS_WRITEUNKNOWN)。
dwFlags 中提供了新的 DBCOLUMNFLAGS_SS_ISVARIABLESCALE 标志,以使应用程序可以确定列的服务器类型,其中 wType 为 DBTYPE_DBTIMESTAMP。 还必须使用 bScale 来标识服务器类型。