_variant_t和_bstr_t这两个类分别封装并管理VARIANT和BSTR这两种数据类型,

VARIANT和BSTR这两种类型是COM中使用的数据类型。

实现_variant_t向int,String ,double,long,byte等类型转换

为了C++中的变量应用到ADO编程中,只能进行数据类型的转换。
通过_variant_t和_bstr_t这两个类,就可

_variant_t var;
var=m_pRecordset->GetCollect ("UserName");
ss=(TCHAR*)(_bstr_t)vUsername;//转换成字符串

以方便的把C++类型变量转换成COM中的变量了。

CString转换为_variant_t:

CString str = _T("xxx");
_variant_t var = (LPCTSTR)str;

把CString 转换为_variant_t:

整型:(long) (_variant_t) m_pRecordset->GetFieldByName("XX");
字符串型:(m_pRecordset->GetFieldByName("XX")).bstrVal;

把一个日期字符串转成_variant_t:

.CString可以直接转_variant_t。
CString szTime("2008-8-8 08:08:08");
_variant_t mt = szTime;
._variant_t转CString用如下函数:
CString VariantToCString(_variant_t var)
{ CString str; //转换以后的字符串 switch(var.vt) {
case VT_BSTR: //var is BSTR type str=var.bstrVal; break;
case VT_I2: //var is short int type str.Format("%d",(int)var.iVal); break;
case VT_I4: //var is long int type str.Format("%d",var.lVal); break;
case VT_R4: //var is float type str.Format(".6f",(double)var.fltVal); break;
case VT_R8: //var is double type str.Format(".6f",var.dblVal); break;
case VT_CY: //var is CY type str=COleCurrency(var).Format(); break;
case VT_DATE: //var is DATE type str=COleDateTime(var).Format(); break;
case VT_BOOL: //var is VARIANT_BOOL str= (var.boolVal==) ?L"FALSE": L"TRUE"; break;
default: str.Format("Unk type %d\n",var.vt); TRACE("Unknown type %d\n",var.vt); } return str; }

把一个int转换为_variant_t类型:

int a = ;
_variant_t var; var = (_variant_t)(long)a;

     UpdateData();
CString strCmd = L"select * from n where 材料='";
strCmd += m_Querymaterial;
strCmd += "'";
m_pRecordset = m_pConnection->Execute(_bstr_t(strCmd), &RecordsAffected, adCmdText);

_variant_t vM,vN;
try
{
while(!m_pRecordset->adoEOF)
{
//取得第0列的值,从0开始计数
vM=m_pRecordset->GetCollect(_variant_t((long)));
//取得“折射率”这一列的值
vN=m_pRecordset->GetCollect("折射率");
CString strtemp;
if (vM.vt!=VT_NULL)
{
strtemp.Format(_T("%s"),vM.lVal);
}
if (vN.vt!=VT_NULL)
{
strtemp+=" ";
strtemp+=(LPCTSTR)(_bstr_t)vN;
}
m_list1.AddString(strtemp);
m_list1.AddString(_T("\n"));
m_pRecordset->MoveNext();//移动到下一条记录
}
}
catch(_com_error &e)
{
AfxMessageBox(e.Description());
return;
}
if (m_pRecordset->Close())
{
m_pRecordset->Close();
m_pRecordset=NULL;
}
if (m_pConnection->State)
{
m_pConnection->Close();
m_pConnection=NULL;
}
}

_variant_t和_bstr_t的更多相关文章

  1. 关于使用_bstr_t的一个坑

    编程中需要将_variant_t转换为char*,常用的方法是:(const char*)_bstr_t(c_variant_t); 使用_bstr_t的构造函数:  _bstr_t(const _v ...

  2. tagVARIANT、VARIANT、_variant_t和COleVariant

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

  3. c++ ado 调用存储过程并得到输出参数和返回值

    // AccessSqlserverByAdo.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <Windows.h ...

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

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

  5. C++ atol

    函数名: atol 功 能: 把字符串转换成长整型数 用 法: long atol(const char *nptr);   简介编辑 相关函数: atof,atoi,strtod,strtol,st ...

  6. VC常用数据类型使用转换

    我们先定义一些常见类型变量借以说明 int i = 100; long l = 2001; float f=300.2; double d=12345.119; char username[]=&qu ...

  7. C++中各种数据量类型转换

    要在Unicode字符集环境下把CString转化为char* 方法: CString str = _T("D://校内项目//QQ.bmp");//////leo这个NB  可以 ...

  8. VC与ADO数据库操作

    VC与ADO数据库操作 学研部的同志们,大家好! 想开一次学习会,实习时间冲突了,只好把文档发给大家看了.重点推荐李振龙的BMP读图教程! 尤其是大三GIS班的同志,注意了,可能实习用得上的! 一.A ...

  9. 在Visual C++中的用ADO进行数据库编程

    1. 生成应用程序框架并初始化OLE/COM库环境 创建一个标准的MFC AppWizard(exe)应用程序,然后在使用ADO数据库的InitInstance函数中初始化OLE/COM库(因为ADO ...

随机推荐

  1. ajaxfileupload异步上传附件添加參数的方法

    1.js文件 // JavaScript Document jQuery.extend({ createUploadIframe: function(id, uri) { //create frame ...

  2. mysql 的S 锁和X锁的区别

    共享锁和排它锁 MySQL的锁系统:shared lock和exclusive lock(共享锁和排他锁,也叫读锁和写锁,即read lock和write lock) 读锁是共享的,或者说是相互不阻塞 ...

  3. Monkey源代码分析番外篇之Android注入事件的三种方法比較

    原文:http://www.pocketmagic.net/2012/04/injecting-events-programatically-on-android/#.VEoIoIuUcaV 往下分析 ...

  4. CentOS7添加logstash5启动脚本

    默认情况使用rpm包安装完logstash之后没有启动脚本,这一点我觉得算是开发不够彻底.官网给了一个脚本,需要根据不同的系统版本生成对应的启动脚本,而且官网没有给明使用方法,对于新用户来说算是个坑, ...

  5. 六、从length和length()方法开始

    首先你可以快速回答下面问题吗.当没有任何IDE的情况下,如何得到一个数组的长度,如何得到一个String的长度.我问这个了很对不同水平的开发者:初级的中级的.他们不能快速正确的回答这个问题.当IDE提 ...

  6. poj2018(高精度二分+dp)

    题意:给你n个数,要你在这n个数里面找到一些连续的数,这些数的数量大于等于m,并且他们的平均值在这n个数里面是最大的....... 思路:先把n个数的最大最小值确定,然后二分枚举平均值,对于每一个连续 ...

  7. Message Delivery Semantics

    4.6 Message Delivery Semantics Now that we understand a little about how producers and consumers wor ...

  8. 【Unity】UGUI控件大小适配父容器

    需求:需要把UGUI控件的尺寸调整到指定大小,如匹配至设计的分辨率.或者说想制定覆盖全屏的背景图片. 做法:将这个UGUI控件的RectTransform组件里的Anchor Presets设为预设的 ...

  9. 【C#】删除集合(Collection)里的元素(Item)

    问题:C#中如果想要删除一个集合中的所有元素,直接for循环边读边删除是不可行的.因为每删除一个元素,后面的元素就会往前排,即它们的索引会向前-1,然后i还是正常的自增,就会跳过下一个元素. // 错 ...

  10. IPC介绍——10个ipcs例子

    IPC介绍——10个ipcs例子 semaphorearrays2010performancesystemaccess ipcs是一个uinx/linux的命令.用于报告系统的消息队列.信号量.共享内 ...