VC++中ADO方式操作数据库之有关“datetime”字段的操作
void CADOConDlg::OnButton1() {// TODO: Add your control notification handler code hereHRESULT hr;CString strSql;_ConnectionPtr m_pConnection;_RecordsetPtr m_pRecordset;try{//create the SQL service object hr = m_pConnection.CreateInstance(__uuidof(Connection));ASSERT( SUCCEEDED(hr) );strSql.Format("%s","Provider=SQLOLEDB;server=xxx;database=xxx;UID=xxx;PWD=xxx");m_pConnection->ConnectionString = (_bstr_t)strSql;hr = m_pConnection->Open("","","",adConnectUnspecified);ASSERT( SUCCEEDED(hr) );//create the record set object for writehr = m_pRecordset.CreateInstance(__uuidof(Recordset));ASSERT( SUCCEEDED(hr) );CString strCurrentTime;strSql.Format(_T("select * from 。。。='。。' "));m_pRecordset->raw_Close();m_pRecordset->CursorLocation = adUseClient;hr = m_pRecordset->Open((_variant_t)strSql, m_pConnection.GetInterfacePtr(), adOpenKeyset, adLockOptimistic, adCmdText);SYSTEMTIME sys; GetLocalTime( &sys ); strCurrentTime.Format(_T("%d-%d-%d %d:%d:%d"),sys.wYear,sys.wMonth,sys.wDay,sys.wHour,sys.wMinute,sys.wSecond);_variant_t varTime = (LPCTSTR)strCurrentTime;m_pRecordset->Update("datetime",(_variant_t)(COleDateTime)varTime);//m_pRecordset->Update("datetime",(_variant_t)(COleDateTime)sys);//COleDateTime只精确到秒级//查下MSDN就知道,其实(COleDateTime)强转的类型可以很多AfxMessageBox("successful");CString strTimeGet;_variant_t varTimeGet;COleDateTime oleTimeGet; SYSTEMTIME sysTimeGet;varTimeGet=m_pRecordset->GetCollect("datetime");if (varTimeGet.vt!=VT_NULL){//strTimeGet=varTimeGet.bstrVal;//此路不通oleTimeGet=(COleDateTime)varTimeGet;VariantTimeToSystemTime(oleTimeGet,&sysTimeGet);strTimeGet.Format(_T("%d-%d-%d %d:%d:%d"),sysTimeGet.wYear,sysTimeGet.wMonth,sysTimeGet.wDay,sysTimeGet.wHour,sysTimeGet.wMinute,sysTimeGet.wSecond);AfxMessageBox(strTimeGet);}}catch (_com_error e){//CWnd::MessageBox(e.ErrorMessage(), "error DB select read!", NULL);AfxMessageBox(e.Description());}}
感谢:http://blog.csdn.net/leeedreadful/article/details/6804366给了解决问题的思路。。。
- 1楼weaminmin昨天 12:34
- 顶