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. 接口测试必学之curl命令

    curl命令使用 curl命令 curl命令是服务器端调试接口最常用的命令,没有之一 curl测试GET接口 curl http://www.baidu.com url参数可以直接写到url中,此时u ...

  2. python 时间等待

    #coding=utf- import time t1=time.time() time.sleep() t2=time.time() print(t2-t1) 输出 3.00304102898

  3. [信息收集]11种绕过CDN查找真实IP方法【转载】

    今天在看一些有关CDN的文章的时候,发现一篇写的蛮好的文章,故转载过来. 原文链接:https://www.cnblogs.com/qiudabai/p/9763739.html 0x01 验证是否存 ...

  4. sql data compare

    https://documentation.red-gate.com/sdc14 About SQL Data Compare With SQL Data Compare, you can compa ...

  5. 如何获取UA?

    代码: function whatBrowser() { document.Browser.Name.value = navigator.appName; document.Browser.Versi ...

  6. Java 中的JSON 字符串

    类库选择 Java中并没有内置JSON的解析,因此使用JSON需要借助第三方类库. 下面是几个常用的 JSON 解析类库: Gson: 谷歌开发的 JSON 库,功能十分全面. FastJson: 阿 ...

  7. 如何准备算法工程师面试,斩获一线互联网公司机器学习岗offer?

    原文:https://zhuanlan.zhihu.com/p/76827460?utm_source=wechat_session&utm_medium=social&utm_oi= ...

  8. 构建Hadoop监控共同体

    HDFS监控背后那些事儿,构建Hadoop监控共同体 原创: 应用研发部 京东云 2018-12-19 https://mp.weixin.qq.com/s/kulwDgwu-rYf4SvQ1dOwc ...

  9. oneway modifier MQ 发送请求不接受任何响应

    Apache Thrift - Home http://thrift.apache.org/ /** * This method has a oneway modifier. That means t ...

  10. 002-创建型-02-抽象工厂模式(Abstract Factory)

    一.概述 抽象工厂模式提供同一个创建一系列相关或相互依赖对象的接口,无须指定它们具体的类 抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态.抽象工厂模式是指当有多个抽象角色时,使用的一 ...