VC通过ODBC连数据库,怎么样把返回的类型都转换成字符串形式 把整型,浮点型,Money型和时间型都转换成字符串,怎么做? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用GetCollect取的时候,直接转换成字符串。 直接用str1.format('%S',上述变量); 不行么? CString str=(char *)(_bstr_t)var; 是要自己转啊,用CString的Format()即可,Str.Format("%d",整型)Str.Format("%f",浮点型)Str.Format("%s",日期型)//日期型随数据库的不同而不同,SQL Server和TeraData中是string;Str.Format("$f",Money型)//Money实际上是浮点型 VARIANT varswitch (var.vt){case ......}自己做转换 我也刚搞数据库,这个类完全可以解决你得问题!class CVarConvertStr{// Operationspublic: 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; } 在mfc的example里面由一个类Crack.h和Crack.cpp 如果直接用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); 请教:如何在VC6下搭建开发实时传输协议的环境 想要份木马源码! 使用ado将一个数据库中的表导入另一个数据库中的表的问题 关于监控硬盘 只需提示一下即可! 兄弟帮帮忙,看看怎样修改 如何将一个已有的应用快速移植为一个ActiveX控件 vc中ADO Data控件的willMove 和MoveComplete 事件 帮帮我吧, "wininet.dll" 和代理服务器... 简单的线程同步问题,解决就分果果! 我的线程中出现了该死的内存泄露问题!!!! 程序运行之怪问题 为什么我用MFC CRecordseti的派生类打开一个数据库时,每次都弹出对话框要你选择数据库?急,求救.
Str.Format("%d",整型)
Str.Format("%f",浮点型)
Str.Format("%s",日期型)//日期型随数据库的不同而不同,SQL Server和TeraData中是string;
Str.Format("$f",Money型)//Money实际上是浮点型
switch (var.vt)
{
case
...
...
}
自己做转换
我也刚搞数据库,这个类完全可以解决你得问题!
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;
}
把所有字段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);