参数和行集元数据

本主题提供了与 OLE DB 日期和时间增强功能相关的以下类型和类型成员的相关信息。

  • DBBINDING 结构

  • ICommandWithParameters::GetParameterInfo

  • ICommandWithParameters::SetParameterInfo

  • IColumnsRowset::GetColumnsRowset

  • IColumnsInfo::GetColumnInfo

ICommandWithParameters::GetParameterInfo

通过 prgParamInfo 在 DBPARAMINFO 结构中返回以下信息 :

参数类型 wType ulParamSize bPrecision bScale dwFlags

DBPARAMFLAGS_SS_ISVARIABLESCALE
日期 DBTYPE_DBDATE(数据库日期类型) 6 10 0 清晰
时间 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 设置
日期时间偏移量 DBTYPE_DBTIMESTAMPOFFSET 20 26,28..34 0..7 设置

请注意,在某些情况下,值范围不是连续的。 这是因为当小数精度大于零时添加了小数点。

仅当连接到 SQL Server 2008(或更高版本)服务器时,DBPARAMFLAGS_SS_ISVARIABLESCALE才有效。 当连接到下级服务器时,永远不会设置 DBPARAMFLAGS_SS_ISVARIABLESCALE。

ICommandWithParameters::SetParameterInfo 和隐含的参数类型

在 DBPARAMBINDINFO 结构中提供的信息必须符合以下规定:

pwszDataSourceType

(特定于访问接口)
pwszDataSourceType

(一般 OLE DB)
ulParamSize bScale
DBTYPE_DATE 6 忽略
日期 DBTYPE_DBDATE(数据库日期类型) 6 忽略
DBTYPE_DBTIME (数据库时间类型) 10 忽略
时间 DBTYPE_DBTIME2 10 0..7
smalldatetime 16 忽略
datetime 16 忽略
datetime2 或 DBTYPE_DBTIMESTAMP DBTYPE_DBTIMESTAMP 16 0..7
日期时间偏移量 DBTYPE_DBTIMESTAMPOFFSET 20 0..7

bPrecision 参数将被忽略。

向服务器发送数据时将忽略“DBPARAMFLAGS_SS_ISVARIABLESCALE”。 应用程序可以使用提供程序特定的类型名称“”和“smalldatetimedatetime强制使用旧表格数据流(TDS)类型。 连接到 SQL Server 2008(或更高版本)服务器时,将使用“datetime2”格式,并在必要时在类型名称为“datetime2”或“DBTYPE_DBTIMESTAMP”时进行隐式服务器转换。 如果使用提供程序特定的类型名称“datetime”“或”“smalldatetime,则忽略 bScale。 否则,应用必须确保 正确设置 bScale 。 如果应用程序未正确设置 bScale ,则从使用“DBTYPE_DBTIMESTAMP”的 SQL Server 2005 升级自 MDAC 和 SQL Server Native Client 的应用程序将失败。 连接到早于 SQL Server 2008 的服务器实例时,将返回“DBTYPE_DBTIMESTAMP”以外的 bScale 值,并返回E_FAIL。

如果未调用 ICommandWithParameters::SetParameterInfo,提供程序将从绑定类型中模拟服务器类型,如 IAccessor::CreateAccessor::CreateAccessor 所示:

绑定类型 pwszDataSourceType

(特定于访问接口)
DBTYPE_DATE datetime2(0)
DBTYPE_DBDATE(数据库日期类型) 日期
DBTYPE_DBTIME (数据库时间类型) time(0)
DBTYPE_DBTIME2 时间(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
日期 DBTYPE_DBDATE(数据库日期类型) 6 10 0 清晰
时间 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 设置
日期时间偏移量 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 标识服务器类型。

DBCOLUMNFLAGS_SS_ISVARIABLESCALE仅在连接到 SQL Server 2008(或更高版本)服务器时有效。 当连接到下级服务器时,未定义 DBCOLUMNFLAGS_SS_ISVARIABLESCALE。

IColumnsInfo::GetColumnInfo

DBCOLUMNINFO 结构返回以下信息:

参数类型 wType ulColumnSize bPrecision bScale dwFlags

DBPARAMFLAGS_SS_ISVARIABLESCALE
日期 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 设置
日期时间偏移量 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 来标识服务器类型 。

另请参阅

元数据 (OLE DB)