ADO中_variant_t变量的使用与转换 colevariant 类型转换

下载 源代码

用ADO做数据库,有个麻烦的事情就是_variant_t变量的使用,使用本例中封装的CConvert类转换就方便了。

[cpp]view plaincopy

//Convert.h:interfacefortheCConvertclass.

//

//////////////////////////////////////////////////////////////////////

#if!defined(AFX_CONVERT_H__EC38F865_4607_4659_BAC8_AA6096C50EC7__INCLUDED_)

#defineAFX_CONVERT_H__EC38F865_4607_4659_BAC8_AA6096C50EC7__INCLUDED_

#if_MSC_VER>1000

#pragmaonce

#endif//_MSC_VER>1000

//////////////////////////////////////////////////////////////////////

//Construction/Destruction

/*

*Copyright(c)2010,zyq5945@126.com

*Allrightsreserved.

*

*文件名称:Convert.h

*文件标识:数据类型转换

*摘要:主要简化ADO中数据类型的转换

*

*当前版本:1.0

*作者:zyq5945@126.com(注意把中文字符换成英文字符)

*完成日期:2010年5月11日

*发布Blog:http://blog.csdn.net/zyq5945/

*

*/

//////////////////////////////////////////////////////////////////////

#defineTS(value)CConvert::ToString(value)

classCConvert

{

public:

staticCStringToString(BYTEbtValue);

staticCStringToString(intiValue);

staticCStringToString(unsignedintiValue);

staticCStringToString(longlValue);

staticCStringToString(unsignedlonglValue);

staticCStringToString(__int64i64Value);

staticCStringToString(unsigned__int64i64Value);

staticCStringToString(floatfltValue);

staticCStringToString(doubledblValue);

staticCStringToString(constCOleDateTime&time);

staticCStringToString(const_variant_t&var);

public:

staticBYTEToByte(LPCTSTRlpszValue);

staticintToInt(LPCTSTRlpszValue);

staticunsignedintToUInt(LPCTSTRlpszValue);

staticlongToLong(LPCTSTRlpszValue);

staticunsignedlongToULong(LPCTSTRlpszValue);

static__int64ToInt64(LPCTSTRlpszValue);

staticunsigned__int64ToUInt64(LPCTSTRlpszValue);

staticfloatToFloat(LPCTSTRlpszValue);

staticdoubleToDouble(LPCTSTRlpszValue);

staticCOleDateTimeToTime(LPCTSTRlpszValue);

static_variant_tToVariant(constCOleDateTime&time);

};

externCConvertConvert;

#endif//!defined(AFX_CONVERT_H__EC38F865_4607_4659_BAC8_AA6096C50EC7__INCLUDED_)

[cpp]view plaincopy

//Convert.cpp:implementationoftheCConvertclass.

//

//////////////////////////////////////////////////////////////////////

#include"stdafx.h"

#include"Convert.h"

#include<comutil.h>

#include<comdef.h>

#ifdef_DEBUG

#undefTHIS_FILE

staticcharTHIS_FILE[]=__FILE__;

#definenewDEBUG_NEW

#endif

//////////////////////////////////////////////////////////////////////

//Construction/Destruction

/*

*Copyright(c)2010,zyq5945@126.com

*Allrightsreserved.

*

*文件名称:Convert.cpp

*文件标识:数据类型转换

*摘要:主要简化ADO中数据类型的转换

*

*当前版本:1.0

*作者:zyq5945@126.com(注意把中文字符换成英文字符)

*完成日期:2010年5月11日

*发布Blog:http://blog.csdn.net/zyq5945/

*

*/

//////////////////////////////////////////////////////////////////////

CConvertConvert;

CStringCConvert::ToString(BYTEbtValue)

{

CStringstrValue;

strValue.Format(_T("%d"),btValue);

returnstrValue;

}

CStringCConvert::ToString(intiValue)

{

CStringstrValue;

strValue.Format(_T("%d"),iValue);

returnstrValue;

}

CStringCConvert::ToString(unsignedintiValue)

{

CStringstrValue;

strValue.Format(_T("%u"),iValue);

returnstrValue;

}

CStringCConvert::ToString(longlValue)

{

CStringstrValue;

strValue.Format(_T("%d"),lValue);

returnstrValue;

}

CStringCConvert::ToString(unsignedlonglValue)

{

CStringstrValue;

strValue.Format(_T("%u"),lValue);

returnstrValue;

}

CStringCConvert::ToString(__int64i64Value)

{

CStringstrValue;

strValue.Format(_T("%I64d"),i64Value);

returnstrValue;

}

CStringCConvert::ToString(unsigned__int64i64Value)

{

CStringstrValue;

strValue.Format(_T("%I64u"),i64Value);

returnstrValue;

}

CStringCConvert::ToString(floatfltValue)

{

CStringstrValue;

strValue.Format(_T("%f"),fltValue);

returnstrValue;

}

CStringCConvert::ToString(doubledblValue)

{

CStringstrValue;

strValue.Format(_T("%f"),dblValue);

returnstrValue;

}

//时间输出格式:2010-05-0622:07:08

CStringCConvert::ToString(constCOleDateTime&time)

{

CStringstrValue;

strValue=time.Format(_T("%Y-%m-%d%H:%M:%S"));

returnstrValue;

}

CStringCConvert::ToString(const_variant_t&var)

{

CStringstrValue;

switch(var.vt)

{

caseVT_BSTR://字符串

caseVT_LPSTR:

caseVT_LPWSTR:

strValue=(LPCTSTR)(_bstr_t)var;

break;

caseVT_I1://无符号字符

caseVT_UI1:

strValue.Format(_T("%d"),var.bVal);

break;

caseVT_I2://短整型

strValue.Format(_T("%d"),var.iVal);

break;

caseVT_UI2://无符号短整型

strValue.Format(_T("%u"),var.uiVal);

break;

caseVT_INT://整型

strValue.Format(_T("%d"),var.intVal);

break;

caseVT_I4://整型

caseVT_I8://长整型

strValue.Format(_T("%d"),var.lVal);

break;

caseVT_UINT://无符号整型

strValue.Format(_T("%d"),var.uintVal);

break;

caseVT_UI4://无符号整型

caseVT_UI8://无符号长整型

strValue.Format(_T("%d"),var.ulVal);

break;

caseVT_VOID:

strValue.Format(_T("%08x"),var.byref);

break;

caseVT_R4://浮点型

strValue.Format(_T("%f"),var.fltVal);

break;

caseVT_R8://双精度型

strValue.Format(_T("%f"),var.dblVal);

break;

caseVT_DECIMAL://小数

strValue.Format(_T("%f"),(double)var);

break;

caseVT_CY:

{

COleCurrencycy=var.cyVal;

strValue=cy.Format();

}

break;

caseVT_BLOB:

caseVT_BLOB_OBJECT:

case0x2011:

strValue=_T("[BLOB]");

break;

caseVT_BOOL://布尔型

strValue=var.boolVal?_T("TRUE"):_T("FALSE");

break;

caseVT_DATE://日期型

{

DATEdt=var.date;

COleDateTimeda=COleDateTime(dt);

strValue=da.Format(_T("%Y-%m-%d%H:%M:%S"));

}

break;

caseVT_NULL://NULL值

caseVT_EMPTY://空

strValue=_T("");

break;

caseVT_UNKNOWN://未知类型

default:

strValue=_T("VT_UNKNOW");

break;

}

returnstrValue;

}

BYTECConvert::ToByte(LPCTSTRlpszValue)

{

BYTEbtValue;

btValue=(BYTE)_ttoi(lpszValue);

returnbtValue;

}

intCConvert::ToInt(LPCTSTRlpszValue)

{

intiValue;

iValue=_ttoi(lpszValue);

returniValue;

}

unsignedintCConvert::ToUInt(LPCTSTRlpszValue)

{

unsignedintiValue;

iValue=_ttoi(lpszValue);

returniValue;

}

longCConvert::ToLong(LPCTSTRlpszValue)

{

longlValue;

lValue=_ttol(lpszValue);

returnlValue;

}

unsignedlongCConvert::ToULong(LPCTSTRlpszValue)

{

unsignedlonglValue;

lValue=_ttol(lpszValue);

returnlValue;

}

__int64CConvert::ToInt64(LPCTSTRlpszValue)

{

__int64i64Value;

i64Value=_ttoi64(lpszValue);

returni64Value;

}

unsigned__int64CConvert::ToUInt64(LPCTSTRlpszValue)

{

unsigned__int64i64Value;

i64Value=_ttoi64(lpszValue);

returni64Value;

}

floatCConvert::ToFloat(LPCTSTRlpszValue)

{

floatfltValue;

#ifdef_MBCS

fltValue=(float)atof(lpszValue);

#else

fltValue=(float)wtof(lpszValue);

#endif

returnfltValue;

}

doubleCConvert::ToDouble(LPCTSTRlpszValue)

{

doubledblValue;

#ifdef_MBCS

dblValue=atof(lpszValue);

#else

dblValue=wtof(lpszValue);

#endif

returndblValue;

}

//时间格式例子:2010-05-0622:07:08

//20100506220708

//2010:05:0622:07:08

//2010-05-06-22-07-08

//只要是“-:”分割的时间格式都符合

COleDateTimeCConvert::ToTime(LPCTSTRlpszValue)

{

unsignedintiArray[6]={2010,5,11,12,00,00};

intnIndex=0;

#if_MSC_VER>=1310//VC6.0不支持CStringAlt::Tokenize

CStringstrTmp;

intcurPos=0;

CStringstrValue(lpszValue);

strTmp=strValue.Tokenize(_T("-:"),curPos);

while(strTmp!=_T("")&&nIndex<6)

{

iArray[nIndex++]=ToUInt(strTmp);

strTmp=strValue.Tokenize(_T("-:"),curPos);

};

#else

TCHARtChar[MAX_PATH]={0};

TCHARtCharTmp[MAX_PATH]={0};

TCHARseps[]="-:";

TCHAR*next_token=NULL;

ASSERT(_tcslen(lpszValue)<MAX_PATH);

RtlCopyMemory(tChar,lpszValue,_tcslen(lpszValue)*sizeof(TCHAR));

next_token=_tcstok(tChar,seps);

while(next_token!=NULL&&nIndex<6)

{

iArray[nIndex++]=_ttoi(next_token);

next_token=_tcstok(NULL,seps);

}

#endif

COleDateTimetime(iArray[0],iArray[1],iArray[2],

iArray[3],iArray[4],iArray[5]);

returntime;

}

_variant_tCConvert::ToVariant(constCOleDateTime&time)

{

_variant_tvtVal;

vtVal.vt=VT_DATE;

vtVal.date=time;

returnvtVal;

}

由于_variant_t重载了以下等号运算符,所以下面类型可以直接给_variant_t赋值

[cpp]view plaincopy

VARIANT

VARIANT*

_variant_t

short

long

float

double

CY

_bstr_t

wchar_t

char

IDispatch*

bool

IUnknown*

DECIMAL

BYTE

char

unsignedshort

unsignedlong

int

unsignedint

__int64

unsigned__int64

由于COleDateTime重载了以下等号运算符,所以下面类型可以直接给COleDateTime赋值

[cpp]view plaincopy

VARIANT

DATE

time_t

__time64_t

SYSTEMTIME

FILETIME

UDATE

本例中CConvert类也增加了一个ToVariant函数把COleDateTime转换为_variant_t类型变量

[cpp]view plaincopy

_variant_tvarValue;

CStringstrValue;

COleDateTimedt;

try

{

//写入各字段值

m_pRecordset->AddNew();

//byte变量

GetDlgItemText(IDC_EDIT1,strValue);

varValue=CConvert::ToByte(strValue);

m_pRecordset->PutCollect("tByte",varValue);

//int变量

GetDlgItemText(IDC_EDIT2,strValue);

varValue=(long)CConvert::ToInt(strValue);

m_pRecordset->PutCollect("tInt",varValue);
ADO中_variant_t变量的使用与转换 colevariant 类型转换

//long变量

GetDlgItemText(IDC_EDIT3,strValue);

varValue=CConvert::ToLong(strValue);

m_pRecordset->PutCollect("tLong",varValue);

//float变量

GetDlgItemText(IDC_EDIT4,strValue);

varValue=CConvert::ToFloat(strValue);

m_pRecordset->PutCollect("tFloat",varValue);

//double变量

GetDlgItemText(IDC_EDIT5,strValue);

varValue=CConvert::ToDouble(strValue);

m_pRecordset->PutCollect("tDouble",varValue);

//COleDateTime变量

GetDlgItemText(IDC_EDIT6,strValue);

dt=CConvert::ToTime(strValue);

varValue=CConvert::ToVariant(dt);

m_pRecordset->PutCollect("tTime",varValue);

//bool变量

GetDlgItemText(IDC_EDIT7,strValue);

if(!strValue.CompareNoCase("TRUE"))

{

varValue=true;

}

else

{

varValue=false;

}

m_pRecordset->PutCollect("tBool",varValue);

//字符串变量

GetDlgItemText(IDC_EDIT8,strValue);

varValue=strValue;

m_pRecordset->PutCollect("tText",varValue);

m_pRecordset->Update();

//更新显示其库内容

intnCurSel=m_list.GetItemCount();

ADOListRecord();

SetListSel(nCurSel);

AfxMessageBox("插入成功!");

}

catch(_com_error&e)

{

dump_com_error(e);

}

参考文献:ADO数据库编程-总结2

  

爱华网本文地址 » http://www.413yy.cn/a/25101011/57286.html

更多阅读

数码 佳能扫描仪怎么使用和维护 扫描仪的使用与维护

扫描仪的使用方法教程,本文以Canon LIDE 110免驱动扫描仪为例,从安装扫描仪到扫描仪的使用方法进行图文解释【数码】佳能扫描仪怎么使用和维护——步骤/方法【数码】佳能扫描仪怎么使用和维护 1、安装扫描仪——将扫描仪通过USB链接

excel中round函数的使用方法 isodd函数的使用方法

excel中round函数的使用方法——简介不少朋友都会问在excel中round函数怎么用,作为使用频率较高函数之一,本文就介绍一下round函数的使用方法。excel中round函数的使用方法——工具/原料office excelexcel中round函数的使用方法——

浅析小学英语教学中文化意识的渗透与培养 意识形态渗透

浅析小学英语教学中文化意识的渗透与培养张允梅 的工作室浅析小学英语教学中文意识渗透培养论文关键词:英语教学 文化意识 渗透 培养论文摘要:语言是文化的重要载体,文化是语言所承载的内容,两者关系十分密切。事实上,不了解一个民

中国有排除万难的决心与能力:东方时事评论|2014-11-29

中国有排除万难的决心与能力 (2014-11-29)美财长敦促欧洲采取更多行动提振经济【综合消息】据媒体报道,美国财政部长杰克·卢警告,欧洲经济或将面临“失去的十年”。针对欧洲经济前景,美国财长这一严厉措辞十分罕见。杰克·卢表示,欧

海洋划界中公平原则的适用与发展 公平责任原则的适用

海洋划界中公平原则的适用与发展*摘要:从1969年北海大陆架划界案到1982年《联合国海洋法公约》,公平原则俨然成为了国际海洋划界实践中的基本原则。然而,公平原则的含义与具体适用方法却不甚明确。本文透过观察国际法院和国际仲裁庭的

声明:《ADO中_variant_t变量的使用与转换 colevariant 类型转换》为网友似若尘埃分享!如侵犯到您的合法权益请联系我们删除