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类的更多相关文章

  1. tagVARIANT、VARIANT、_variant_t和COleVariant

    tagVARIANT是一个结构体struct:  C++ Code: tagVARIANT 123456789101112131415161718192021222324252627282930313 ...

  2. COleVariant功能

    COLeVariant是数据库常用到的数据类型.它可以是字符串,整型值,日期等.知道怎样将它转换为CString. COLeVariant类是对VARIANT结构的封装.它的构造函数具有极为强大的功能 ...

  3. Java类的继承与多态特性-入门笔记

    相信对于继承和多态的概念性我就不在怎么解释啦!不管你是.Net还是Java面向对象编程都是比不缺少一堂课~~Net如此Java亦也有同样的思想成分包含其中. 继承,多态,封装是Java面向对象的3大特 ...

  4. CString-int-string-char-BSTR之间的转换

    一.CString, int, string, char*之间的转换 string 转 CString CString.Format("%s", string.c_str());c ...

  5. VC++常用数据类型

    原文地址:https://www.cnblogs.com/yincheng01/archive/2008/12/31/2213386.html 一.              VC常用数据类型列表 二 ...

  6. VC++常用数据类型及其操作详解

    原文地址:http://blog.csdn.net/ithomer/article/details/5019367 VC++常用数据类型及其操作详解 一.VC常用数据类型列表 二.常用数据类型转化 2 ...

  7. 串口调试助手vc源程序及其详细编写过程

    串口调试助手vc源程序及其详细编写过程   目次: 1.建立项目 2.在项目中插入MSComm控件 3.利用ClassWizard定义CMSComm类控制变量 4.在对话框中添加控件 5.添加串口事件 ...

  8. CString char BSTR 转换

     关于字符集不一的历史原因,可以参考: UNICODE与ANSI的区别 以下是网上转载的资料.我将辅以自己的实例,说明并总结关系. 一.CString, int, string, char*之间的转换 ...

  9. com口操作excel

    _Application app;       //Excel应用程序接口 Workbooks books;        //工作薄集合 _Workbook book;     //工作薄 Work ...

随机推荐

  1. SSH dao层异常 org.hibernate.HibernateException: No Session found for current thread

    解决方法: 在 接口方法中添加 事务注解 即可. public interface IBase<PK extends Serializable, T> { @Transactional v ...

  2. [线性代数] 矩阵代数基础 Basic Matrix Algebra

    Overview: Matrix algebra Matrix algebra covers rules allowing matrices to be manipulated algebraical ...

  3. 彻底搞懂Python的字符编码

    前言:中文编码问题一直是程序员头疼的问题,而Python2中的字符编码足矣令新手抓狂.本文将尽量用通俗的语言带大家彻底的了解字符编码以及Python2和3中的各种编码问题. 一.什么是字符编码. 要彻 ...

  4. 2018-2019 20175234 实验三《敏捷开发与XP实践》实验报告

    目录 2018-2019 20175234 实验三<敏捷开发与XP实践>实验报告 实验内容 实验中的问题 码云链接 参考资料 2018-2019 20175234 实验三<敏捷开发与 ...

  5. T-MAX-凡事预则立

    T-MAX-凡事预则立 这个作业属于哪个课程 2019秋福大软件工程实践Z班 这个作业要求在哪里 团队作业第五次-项目冲刺 团队名称 T-MAX 这个作业的目标 1.冲刺的时间计划安排2.答辩问题的回 ...

  6. python 将数据写入excel

    摘要链接: python第三方库——xlrd和xlwt操作Excel文件学习 :http://blog.csdn.net/wangkai_123456/article/details/50457284 ...

  7. Linux如何使用shell命令检测PHP木马防止脚本木马的破坏

    1.一句话查找PHP木马 代码如下 # find / -name "*.php" |xargs egrep "phpspy|c99sh|milw0rm|eval\(gun ...

  8. golang 不足

    滴滴出行技术总监:关于技术选型的那些事儿 原创: 杜欢 InfoQ 2017-02-26   https://mp.weixin.qq.com/s/6EtLzMhdtQijRA7Xrn_pTg     ...

  9. OpenGL ES: (3) EGL、EGL绘图的基本步骤、EGLSurface、ANativeWindow

    1. EGL概述 EGL 是 OpenGL ES 渲染 API 和本地窗口系统(native platform window system)之间的一个中间接口层,它主要由系统制造商实现. EGL提供如 ...

  10. react图片自适应组件

    import * as React from 'react'; import 'animate.css/animate.css' import {AutoImg} from "./style ...