_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 ...
随机推荐
- UnityTestTools測试工具
由于工作关系,要了解Unity上的測试工具,该工具基于Nunit框架.通过查阅资料了解到在Unity5.3中做出了一些改变,自带的仅仅剩下单元測试工具,假设想用其它的工具比方断言.集成測试,就须要前往 ...
- Parallel Programming AND Asynchronous Programming
https://blogs.oracle.com/dave/ Java Memory Model...and the pragmatics of itAleksey Shipilevaleksey.s ...
- posix多线程--条件变量
条件变量是用来通知共享数据状态信息的. 1.条件变量初始化两种方式:(1)静态初始化pthread_cond_t cond = PTHREAD_COND_INITIALIZER;代码示例如下: #in ...
- CDN技术详解笔记
1.影响网络传输的四个因素(1)“第一公里”:网站服务器接入互联网的链路所能提供的带宽.(2)“最后一公里”:用户接入带宽.(3)对等互联关口:不同网络之间的互联互通带宽.(4)长途骨干传输:首先是长 ...
- UBoot启动代码第一阶段流程
http://blog.csdn.net/xautfengzi/article/details/7470134 前段时间了看了UBoot的源码,放了一段时间之后忘得差不多了.现做一些注释,方便以后温习 ...
- js事件委托及其原理
1,什么是事件委托:通俗的讲,事件就是onclick,onmouseover,onmouseout,等就是事件,委托呢,就是让别人来做,这个事件本来是加在某些元素上的,然而你却加到别人身上来做,完成这 ...
- MySQL的使用笔记
@Reference Manual (以下简称REF-M) 在官网,选择MySQL Server,选择Documentation,就可以下载了,建议下载PDF 注意版本要对应 很重要,需要的时候就go ...
- VBA学习笔记(8)--遍历所有文件夹和文件
说明(2017.3.26): 1. 采用的是兰色幻想教学视频中的“父子转换法” 2. 这种VBA的遍历文件夹方法非常难理解,主要是因为dir这个函数,第一次带参数调用,返回的是此目录下的第一个文件,第 ...
- Springmvc mvc:exclude-mapping不拦截 无效
最近在使用ssm框架搭建一个后台,需要判断每个请求都判断是否登录,未登录跳转到登录页面, 使用发现 mvc:exclude-mapping 不拦截,发现,怎么都无效,依然是进行拦截.查了很多资料,总算 ...
- Spring监管下的Hibernate配置文件
今天看了看别人的程序,用的是SSH搭建的,自己回忆了下感觉假设採用注解的话那么Hibernate的配置文件hibernate.cfg.xml是还须要的,而*.hbm.xml则能够被注解所替代的,结果确 ...