OLEDB数据库编程问题,高手请进!!!!!
我用CCommand<CDynamicAccessor> command 命令查询数据库
通过command.GetValue()获取各个列的数据,但通过各种转换方法都无法得出正确的数值,不知道有什么好的方法,我在网上查了一些例子,但总是转换不到正确的数据,请高手帮忙???
愿付高分,先给100!!!!!!!!!!!!!!!1
付例子:
CStrinbg sSQLCmd = _T("SELECT * FROM HISDATA20070711 WHERE TAGTIME > '2007-7-11 14:06:35'");
CCommand<CDynamicAccessor> rs;
HRESULT hr = rs.Open(Session,sSQLCmd,NULL,NULL,DBGUID_DBSQL,FALSE);
CDBPropSet propset(DBPROPSET_ROWSET);
propset.AddProperty(DBPROP_CANFETCHBACKWARDS,true);
propset.AddProperty(DBPROP_IRowsetChange,true);
propset.AddProperty(DBPROP_UPDATABILITY,DBPROPVAL_UP_CHANGE|DBPROPVAL_UP_INSERT|DBPROPVAL_UP_DELETE);
HRESULT hr = rs.Open(m_Session,sSQLCmd,&propset);
int nCount =0;
DBSTATUS dbStatus;
DBTYPE dbType;
CString str;
double dValue;
long lValue;
VARIANT vt;
while(SUCCEEDED(hr) && hr != DB_S_ENDOFROWSET )
{
for(size_t nCol=1; nCol< rs.GetColumnCount();nCol++)
{
rs.GetStatus(nCol, &dbStatus);
if(dbStatus != DBSTATUS_S_ISNULL && rs.GetColumnType(nCol, &dbType))
{
switch (dbType)
{
case DBTYPE_WSTR:
case DBTYPE_BSTR: str = (LPCWSTR)rs.GetValue(nCol); break;
case DBTYPE_I1:
case DBTYPE_UI1: lValue = (long)(*((BYTE*)rs.GetValue(nCol))); break;
case DBTYPE_I2:
case DBTYPE_UI2: lValue = (long)(*((short*)rs.GetValue(nCol))); break;
case DBTYPE_I4:
case DBTYPE_UI4: lValue = (long)(*((long*)rs.GetValue(nCol))); break;
case DBTYPE_R4: dValue = (double)(*((float*)rs.GetValue(nCol))); break;
case DBTYPE_R8: dValue = *((double*)rs.GetValue(nCol)); break;
default:
break;
}
}
}
}