VC通过ODBC连数据库,怎么样把返回的类型都转换成字符串形式

gaoyu 2003-12-11 08:43:09
把整型,浮点型,Money型和时间型都转换成字符串,怎么做?
...全文
34 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
chehw 2003-12-16
  • 打赏
  • 举报
回复
如果直接用SDK,很容易转换。
把所有字段Bind到一个字符缓冲区。大部分数据库系统会自动提供转换。
TCHAR szData[MAX_BUFFER];
LONG cbData;
SQLBindCol(hstmt, 1, SQL_C_CHAR, szData, MAX_BUFFER, &cbData);
SQLBindCol(hstmt, 2, SQL_C_CHAR, szData, MAX_BUFFER, &cbData);
SQLBindCol(hstmt, n, SQL_C_CHAR, szData, MAX_BUFFER, &cbData);


checkyvc6 2003-12-16
  • 打赏
  • 举报
回复
在mfc的example里面由一个类Crack.h和Crack.cpp
promaliu 2003-12-16
  • 打赏
  • 举报
回复

我也刚搞数据库,这个类完全可以解决你得问题!
class CVarConvertStr
{

// Operations
public:
static LPCTSTR strFieldType(short sType);
static LPCTSTR strQueryDefType(short sType);
static LPCTSTR strBOOL(BOOL bFlag);
//这个函数是你需要详细看的
static CString strVARIANT(const COleVariant& var);

};


LPCTSTR CVarConvertStr::strFieldType(short sType)
{
switch(sType)
{
case (dbBoolean):
return _T("Bool");
case (dbByte):
return _T("Byte");
case (dbInteger):
return _T("Integer");
case (dbLong):
return _T("Long");
case (dbCurrency):
return _T("Currency");
case (dbSingle):
return _T("Single");
case (dbDouble):
return _T("Double");
case (dbDate):
return _T("Date");
case (dbText):
return _T("Text");
case (dbLongBinary):
return _T("Long Binary");
case (dbMemo):
return _T("Memo");
case (dbGUID):
return _T("GUID");
}
return _T("Unknown");
}

LPCTSTR CVarConvertStr::strQueryDefType(short sType)
{
switch(sType){
case (dbQSelect):
return _T("Select");
case (dbQAction):
return _T("Action");
case (dbQCrosstab):
return _T("Crosstab");
case (dbQDelete):
return _T("Delete");
case (dbQUpdate):
return _T("Update");
case (dbQAppend):
return _T("Append");
case (dbQMakeTable):
return _T("MakeTable");
case (dbQDDL):
return _T("DDL");
case (dbQSQLPassThrough):
return _T("SQLPassThrough");
case (dbQSetOperation):
return _T("Set Operation");
case (dbQSPTBulk):
return _T("SPTBulk");
}
return _T("Unknown");
}

LPCTSTR CVarConvertStr::strBOOL(BOOL bFlag)
{
return bFlag ? _T("TRUE") : _T("FALSE");
}

CString CVarConvertStr::strVARIANT(const COleVariant& var)
{
CString strRet;
strRet = _T("Fish");
switch(var.vt){
case VT_EMPTY:
case VT_NULL:
strRet = _T("NULL");
break;
case VT_I2:
strRet.Format(_T("%hd"),V_I2(&var));
break;
case VT_I4:
strRet.Format(_T("%d"),V_I4(&var));
break;
case VT_R4:
strRet.Format(_T("%e"),(double)V_R4(&var));
break;
case VT_R8:
strRet.Format(_T("%e"),V_R8(&var));
break;
case VT_CY:
strRet = COleCurrency(var).Format();
break;
case VT_DATE:
strRet = COleDateTime(var).Format(_T("%m %d %y"));
break;
case VT_BSTR:
strRet = V_BSTRT(&var);
break;
case VT_DISPATCH:
strRet = _T("VT_DISPATCH");
break;
case VT_ERROR:
strRet = _T("VT_ERROR");
break;
case VT_BOOL:
return strBOOL(V_BOOL(&var));
case VT_VARIANT:
strRet = _T("VT_VARIANT");
break;
case VT_UNKNOWN:
strRet = _T("VT_UNKNOWN");
break;
case VT_I1:
strRet = _T("VT_I1");
break;
case VT_UI1:
strRet.Format(_T("0x%02hX"),(unsigned short)V_UI1(&var));
break;
case VT_UI2:
strRet = _T("VT_UI2");
break;
case VT_UI4:
strRet = _T("VT_UI4");
break;
case VT_I8:
strRet = _T("VT_I8");
break;
case VT_UI8:
strRet = _T("VT_UI8");
break;
case VT_INT:
strRet = _T("VT_INT");
break;
case VT_UINT:
strRet = _T("VT_UINT");
break;
case VT_VOID:
strRet = _T("VT_VOID");
break;
case VT_HRESULT:
strRet = _T("VT_HRESULT");
break;
case VT_PTR:
strRet = _T("VT_PTR");
break;
case VT_SAFEARRAY:
strRet = _T("VT_SAFEARRAY");
break;
case VT_CARRAY:
strRet = _T("VT_CARRAY");
break;
case VT_USERDEFINED:
strRet = _T("VT_USERDEFINED");
break;
case VT_LPSTR:
strRet = _T("VT_LPSTR");
break;
case VT_LPWSTR:
strRet = _T("VT_LPWSTR");
break;
case VT_FILETIME:
strRet = _T("VT_FILETIME");
break;
case VT_BLOB:
strRet = _T("VT_BLOB");
break;
case VT_STREAM:
strRet = _T("VT_STREAM");
break;
case VT_STORAGE:
strRet = _T("VT_STORAGE");
break;
case VT_STREAMED_OBJECT:
strRet = _T("VT_STREAMED_OBJECT");
break;
case VT_STORED_OBJECT:
strRet = _T("VT_STORED_OBJECT");
break;
case VT_BLOB_OBJECT:
strRet = _T("VT_BLOB_OBJECT");
break;
case VT_CF:
strRet = _T("VT_CF");
break;
case VT_CLSID:
strRet = _T("VT_CLSID");
break;
}
WORD vt = var.vt;
if(vt & VT_ARRAY)
{
#pragma warning(disable : 4244)
vt = vt & ~VT_ARRAY;
#pragma warning(default : 4244)
strRet = _T("Array of ");
}
if(vt & VT_BYREF)
{
#pragma warning(disable : 4244)
vt = vt & ~VT_BYREF;
#pragma warning(default : 4244)
strRet += _T("Pointer to ");
}
if(vt != var.vt)
{
switch(vt){
case VT_EMPTY:
strRet += _T("VT_EMPTY");
break;
case VT_NULL:
strRet += _T("VT_NULL");
break;
case VT_I2:
strRet += _T("VT_I2");
break;
case VT_I4:
strRet += _T("VT_I4");
break;
case VT_R4:
strRet += _T("VT_R4");
break;
case VT_R8:
strRet += _T("VT_R8");
break;
case VT_CY:
strRet += _T("VT_CY");
break;
case VT_DATE:
strRet += _T("VT_DATE");
break;
case VT_BSTR:
strRet += _T("VT_BSTR");
break;
case VT_DISPATCH:
strRet += _T("VT_DISPATCH");
break;
case VT_ERROR:
strRet += _T("VT_ERROR");
break;
case VT_BOOL:
strRet += _T("VT_BOOL");
break;
case VT_VARIANT:
strRet += _T("VT_VARIANT");
break;
case VT_UNKNOWN:
strRet += _T("VT_UNKNOWN");
break;
case VT_I1:
strRet += _T("VT_I1");
break;
case VT_UI1:
strRet += _T("VT_UI1");
break;
case VT_UI2:
strRet += _T("VT_UI2");
break;
case VT_UI4:
strRet += _T("VT_UI4");
break;
case VT_I8:
strRet += _T("VT_I8");
break;
case VT_UI8:
strRet += _T("VT_UI8");
break;
case VT_INT:
strRet += _T("VT_INT");
break;
case VT_UINT:
strRet += _T("VT_UINT");
break;
case VT_VOID:
strRet += _T("VT_VOID");
break;
case VT_HRESULT:
strRet += _T("VT_HRESULT");
break;
case VT_PTR:
strRet += _T("VT_PTR");
break;
case VT_SAFEARRAY:
strRet += _T("VT_SAFEARRAY");
break;
case VT_CARRAY:
strRet += _T("VT_CARRAY");
break;
case VT_USERDEFINED:
strRet += _T("VT_USERDEFINED");
break;
case VT_LPSTR:
strRet += _T("VT_LPSTR");
break;
case VT_LPWSTR:
strRet += _T("VT_LPWSTR");
break;
case VT_FILETIME:
strRet += _T("VT_FILETIME");
break;
case VT_BLOB:
strRet += _T("VT_BLOB");
break;
case VT_STREAM:
strRet += _T("VT_STREAM");
break;
case VT_STORAGE:
strRet += _T("VT_STORAGE");
break;
case VT_STREAMED_OBJECT:
strRet += _T("VT_STREAMED_OBJECT");
break;
case VT_STORED_OBJECT:
strRet += _T("VT_STORED_OBJECT");
break;
case VT_BLOB_OBJECT:
strRet += _T("VT_BLOB_OBJECT");
break;
case VT_CF:
strRet += _T("VT_CF");
break;
case VT_CLSID:
strRet += _T("VT_CLSID");
break;
}
}
return strRet;
}
魔芋 2003-12-12
  • 打赏
  • 举报
回复
VARIANT var
switch (var.vt)
{
case
...
...
}
自己做转换
Goldcastle 2003-12-12
  • 打赏
  • 举报
回复
同意楼上
smallsix 2003-12-12
  • 打赏
  • 举报
回复
大家都说完了 没得说了

ckp 2003-12-12
  • 打赏
  • 举报
回复
是要自己转啊,用CString的Format()即可,
Str.Format("%d",整型)
Str.Format("%f",浮点型)
Str.Format("%s",日期型)//日期型随数据库的不同而不同,SQL Server和TeraData中是string;
Str.Format("$f",Money型)//Money实际上是浮点型
AkiraChing 2003-12-11
  • 打赏
  • 举报
回复
需要自己写,你可以搜一下,以前有人回答过这个问题
crystal_heart 2003-12-11
  • 打赏
  • 举报
回复
up
kongyunzhongque 2003-12-11
  • 打赏
  • 举报
回复
CString str=(char *)(_bstr_t)var;
caral525 2003-12-11
  • 打赏
  • 举报
回复
直接用str1.format('%S',上述变量); 不行么?
gaoyu 2003-12-11
  • 打赏
  • 举报
回复
那要自己写每种类型的转换函数吗?
axiaowin 2003-12-11
  • 打赏
  • 举报
回复
用GetCollect取的时候,直接转换成字符串。

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧