_variant_t和_bstr_t
_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的更多相关文章
- 关于使用_bstr_t的一个坑
编程中需要将_variant_t转换为char*,常用的方法是:(const char*)_bstr_t(c_variant_t); 使用_bstr_t的构造函数: _bstr_t(const _v ...
- tagVARIANT、VARIANT、_variant_t和COleVariant
tagVARIANT是一个结构体struct: C++ Code: tagVARIANT 123456789101112131415161718192021222324252627282930313 ...
- c++ ado 调用存储过程并得到输出参数和返回值
// AccessSqlserverByAdo.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <Windows.h ...
- CString-int-string-char-BSTR之间的转换
一.CString, int, string, char*之间的转换 string 转 CString CString.Format("%s", string.c_str());c ...
- C++ atol
函数名: atol 功 能: 把字符串转换成长整型数 用 法: long atol(const char *nptr); 简介编辑 相关函数: atof,atoi,strtod,strtol,st ...
- VC常用数据类型使用转换
我们先定义一些常见类型变量借以说明 int i = 100; long l = 2001; float f=300.2; double d=12345.119; char username[]=&qu ...
- C++中各种数据量类型转换
要在Unicode字符集环境下把CString转化为char* 方法: CString str = _T("D://校内项目//QQ.bmp");//////leo这个NB 可以 ...
- VC与ADO数据库操作
VC与ADO数据库操作 学研部的同志们,大家好! 想开一次学习会,实习时间冲突了,只好把文档发给大家看了.重点推荐李振龙的BMP读图教程! 尤其是大三GIS班的同志,注意了,可能实习用得上的! 一.A ...
- 在Visual C++中的用ADO进行数据库编程
1. 生成应用程序框架并初始化OLE/COM库环境 创建一个标准的MFC AppWizard(exe)应用程序,然后在使用ADO数据库的InitInstance函数中初始化OLE/COM库(因为ADO ...
随机推荐
- android studio - 解决Android Studio不停的Indexing的问题
File > Invalidate Caches/Restart
- [转贴]Cocos2d-x3.2与OpenGL渲染总结(一)Cocos2d-x3.2的渲染流程
看了opengles有一段时间了,算是了解了一下下.然后,就在基本要决定还是回归cocos2dx 3.2的,看了这篇好文章,欣喜转之~ 推荐看原帖: Cocos2d-x3.2与OpenGL渲染总结(一 ...
- 解决Ubuntu16的风扇高速旋转问题(双显卡)
问题描述 自从我的双显卡的笔记本装上Ubuntu 14 后,风扇狂转.发热巨大.网上一搜索估计是显卡驱动不太行.最近英伟达的Nvidia Prime可以完美地切换双显卡,安装这个软件后,风扇就不会狂转 ...
- lambda续集——1
捕获列表,只用于局部非static变量,lambda可以直接使用局部static变量和它所在函数之外声明的名字. eg: #include<iostream> using namespac ...
- Gtest创建第一个测试
gtest测试框架是在不同平台上(Linux,Mac OS X,Windows,Cygwin,Windows CE和Symbian)为编写C++测试而生成的.它是基于xUnit架构的测试框架,支持自动 ...
- POST请求中,往URL传递数组
POST请求中,前端/客户端需要手动拼接URL,然后走接口跟后端交互. 若想传递数组,可以按照如下的拼接形式: &materialsTypeId=11&materialsTypeId= ...
- 【Unity/Kinect】Kinect入门——项目搭建
本文是Unity Store里的官方Demo包中的ReadMe翻译(别人翻的),介绍了用Unity如何入门搭建起一个Kinect项目工程. 非常感谢下面这位大大的无私奉献! http://www.ma ...
- [pthread]Linux C 多线程简单示例
#include <stdio.h> #include <pthread.h> pthread_mutex_t mutex; pthread_cond_t cond; void ...
- Java实现 简单聊天软件
简单的聊天软件 //客户端 package yjd9; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; ...
- [转]Eclipse下导入外部jar包的3种方式
我们在用Eclipse开发程序的时候,经常要用到第三方jar包.引入jar包不是一个小问题,由于jar包位置不清楚,而浪费时间.下面配图说明3种Eclipse引入jar包的方式. 1.最常用的普通 ...