COleVariant类
COleVariant本质上是一个枚举,用同一种类型来表达不同的子类型。如同boost中的variant。
COLeVariant类是对VARIANT结构的封装。
VARIANT结构包含两部分。其一是VARIANT型的成员变量vt;其二是个联合类型,这个联合包含了VC常用的几乎所有类型。因为联合用的是相同的存储空间,因此对联合的内容的解释依赖于vt。
例如:
若vt的值是VT_UI2,说明该联合被解释为short int。并使用成员变量名iVal。
若vt的值是VT_BSTR,说明该联合被解释为BSTR类型。并使用成员变量名bstrVal。
若vt的值是VT_BSTR|VT_BYREF,说明该联合被解释为BSTR型指针。并使用成员变量名pbstrVal。
它的构造函数具有极为强大的功能,当对象构造时首先调用VariantInit进行初始化,然后根据参数中的标准类型调用相应的构造函数,并使用VariantCopy进行转换赋值操作,当VARIANT对象不在有效范围时,它的析构函数就会被自动调用,由于析构函数调用了VariantClear,因而相应的内存就会被自动清除。除此之外,COLeVariant的赋值操作符在与VARIANT类型转换中为我们提供极大的方便。
若从数据库返回的是简单类型,如short,long,等,则直接引用既可。注:COLeVariant类重载了“=”操作符,所以常用的类型可以直接转换, 若返回的是字符串类型,则有可能是bstrVal或pbstrVal。依赖于数据库服务程序。BSTR实际上就是个unicode字符串,CString的构造函数和赋值操作都能直接识别这一类型。
COleVariant功能:
COleVariant类是对VARIANT结构的封装。它的构造函数具有极为强大的功能:
1、当对象构造时首先调用VariantInit进行 初始化,然后根据参数中的标准类型调用相应的构造函数,并使用VariantCopy进行转换赋值操作;
2、当VARIANT对象不在有效范围时,它的析构函 数就会被自动调用,由于析构函数调用了VariantClear,因而相应的内存就会被自动清除。
COleVariant是数据库常用到的数据类型。它可以是字串,整型值,日期等。知道怎样将它转换为CString很有用处。
例如:设有CString A; COleVariant B; 来看看怎样将COleVariant转换为CString:
switch(B.vt){
case VT_BSTR: A=V_BSTRT(&B); break;//COleVariant是一个字串
case VT_I2: A.Format(_T("%hd"),V_I2(&B));break;//是短整型
case VT_I4: A.Format(_T("%d"),V_I4(&B));break;//是长整型
case VT_R4: A.Format(_T("%e"),(double)V_R4(&B));break;//是浮点数
case VT_R8: A.Format(_T("%e"),V_R8(&B));break;//是浮点数
case VT_CY: A=COleCurrency(B).Format();break;//是货币值
case VT_DATE: A=COleDateTime(B).Format("%Y-%m-%d");break;//是日期
case VT_BOOL: A=V_BOOL(&B)?"True":"False";break;//是布尔值}
COleVariant类的更多相关文章
- tagVARIANT、VARIANT、_variant_t和COleVariant
tagVARIANT是一个结构体struct: C++ Code: tagVARIANT 123456789101112131415161718192021222324252627282930313 ...
- COleVariant功能
COLeVariant是数据库常用到的数据类型.它可以是字符串,整型值,日期等.知道怎样将它转换为CString. COLeVariant类是对VARIANT结构的封装.它的构造函数具有极为强大的功能 ...
- Java类的继承与多态特性-入门笔记
相信对于继承和多态的概念性我就不在怎么解释啦!不管你是.Net还是Java面向对象编程都是比不缺少一堂课~~Net如此Java亦也有同样的思想成分包含其中. 继承,多态,封装是Java面向对象的3大特 ...
- CString-int-string-char-BSTR之间的转换
一.CString, int, string, char*之间的转换 string 转 CString CString.Format("%s", string.c_str());c ...
- VC++常用数据类型
原文地址:https://www.cnblogs.com/yincheng01/archive/2008/12/31/2213386.html 一. VC常用数据类型列表 二 ...
- VC++常用数据类型及其操作详解
原文地址:http://blog.csdn.net/ithomer/article/details/5019367 VC++常用数据类型及其操作详解 一.VC常用数据类型列表 二.常用数据类型转化 2 ...
- 串口调试助手vc源程序及其详细编写过程
串口调试助手vc源程序及其详细编写过程 目次: 1.建立项目 2.在项目中插入MSComm控件 3.利用ClassWizard定义CMSComm类控制变量 4.在对话框中添加控件 5.添加串口事件 ...
- CString char BSTR 转换
关于字符集不一的历史原因,可以参考: UNICODE与ANSI的区别 以下是网上转载的资料.我将辅以自己的实例,说明并总结关系. 一.CString, int, string, char*之间的转换 ...
- com口操作excel
_Application app; //Excel应用程序接口 Workbooks books; //工作薄集合 _Workbook book; //工作薄 Work ...
随机推荐
- linux桌面发行版简介
本文通过MetaWeblog自动发布,原文及更新链接:https://extendswind.top/posts/technical/linux_desktop_distribution linux系 ...
- 修改rabbitmq web-UI端口号
一.拷贝配置文件 [root@test03 ~]# cd /usr/share/doc/rabbitmq-server-3.6.15/ [root@test03 rabbitmq-server-3.6 ...
- mysql PS1个性化
method ) $ export MYSQL_PS1="\u@\h [\d]> " method ) mysql> prompt \u@\h [\d]> met ...
- OpenFOAM Tutorial Standard Solvers【转载】
转载自:http://www.cnblogs.com/fortran/articles/1996927.html boundaryFoam Steady-state solver for 1D tur ...
- 读取文件名.cpp
#include <io.h> #include <iostream> #include <string> #include <windows.h> # ...
- 学JavaScript的感想小结1
学了几天的Javascript,刚开始就在想Java和JavaScript有什么不同,算了其实两个咱都不会也没多想了,带着这个好奇心学菜鸟教程,没想到还真得到了解答,瞬间兴趣提升,愿意追根溯源的教程还 ...
- go struct 自定义标签获取
package main import ( "fmt" "reflect" ) type Test struct { Id int `json:"us ...
- spring aop中aspect和advisor的区别
之前看到spring AOP配置aspect(切面)有两种方式,一种是利用注解的方式配置,一种是利用XML的方式配置. 我们的配置是这样的<aop:aspect>,还有另外一种<ao ...
- Dataeye计算任务架构
https://mp.weixin.qq.com/s/9Q5-oU3bPIBieScwzrawDg 资源消耗降低2/3,Flink在唯品会实时平台的应用(有彩蛋) 王新春 DBAplus社群 2018 ...
- vue 引入公共css文件
1.在入口js文件main.js中引入,一些公共的样式文件,可以在这里引入. import Vue from 'vue'import App from './App' // 引入App这个组件impo ...