SQL Server数据库里的Date型变量怎么取出并变换成字符型? 取出来的日期型本来就可以当作字符串用吧?反正我用vb可以。而且在sql中比较时间的时候不也是用了''的吗?难道c++不能用强制类型转换? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我是说怎么处理?我对那个_variant_t比较头疼 数据库中我一向用char作日期字段,这样不同数据库能通用 void CC2Dlg::OnOK() { CoInitialize(NULL); try { _ConnectionPtr pConn("ADODB.Connection"); _RecordsetPtr pRst("ADODB.Recordset"); pConn->Open("Provider=sqloledb;Data Source=testcomputer;"//testcomputer:computer name "Initial Catalog=testdb;User Id=sa;Password=;",//testdb:database name "", "", adConnectUnspecified); pRst->Open( "table1", _variant_t((IDispatch *) pConn, true), adOpenStatic, adLockReadOnly, adCmdTable); _variant_t varint = pRst->GetFields()->GetItem("intfield")->GetValue(); _variant_t vardate=pRst->Fields->Item["datefield"]->Value; SYSTEMTIME systime; VariantTimeToSystemTime(vardate.date,&systime); char mybuf[1024]; wsprintf(mybuf,"intvalue is '%d ,string date: %d/%d/%d,%d:%d:%d:%d'\n",varint.intVal, systime.wYear,systime.wMonth,systime.wDay, systime.wHour,systime.wMinute,systime.wSecond,systime.wMilliseconds); ::MessageBox(NULL,mybuf,"date",MB_OK); pRst->Close(); pConn->Close(); } catch (_com_error &e) { char buf[1024]; wsprintf(buf,"Description = '%s'\n", (char*) e.Description()); ::MessageBox(NULL,buf,"error",MB_OK); } ::CoUninitialize();} _variant_t TheValue; TheValue = m_pRecordset->GetCollect("No"); //intno=TheValue.iVal;TheValue= m_pRecordset->GetCollect("Date"); //dateCOleDateTime mydate(TheValue.date);TheValue = m_pRecordset->GetCollect("string"); //stringstrcpy(my,(CString)TheValue.bstrVal); 如果是Date类型则得到的_variant_t中_variant.vt = VT_DATE,对应的时间为_variant.date这个时间类型为微软标准的DATE类型,8bytes长具体定义可以看msdn要讲它转为string,可以用COleDateTime转,楼上的已经说了如果你不用mfc你可以在COleDateTime的源文件拷出几个函数来转换 SYSTEMTIME st;TCHAR szBuffer[MAX_PATH];if(vat.vt = VT_DATE){ VariantTimeToSystemTime( var.date, &st); sprintf(szBuffer, "%d-%d-%d %02d:%02d:%02d", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond );} 如何在某字段修改后给另一字段赋值 存储过程 如何查询连续3天内没记录的人 求一SQL语句 删除多个表中相关联的一条记录! 请问我这个语句错在哪里? SQL SERVER2000 SP3补丁问题 问几个关于SQLServer触发器的问题 请教一个问题,sql server 中,我插入一条记录,为啥会出现整个表的数据都更新 语文,数学,外语 三门成绩中的前三名查询 关于存储过程的返回值. 那里有详细介绍XML的网页?? 简单问题,如何使用ODBC SDK。
我对那个_variant_t比较头疼
{
CoInitialize(NULL);
try
{
_ConnectionPtr pConn("ADODB.Connection");
_RecordsetPtr pRst("ADODB.Recordset");
pConn->Open("Provider=sqloledb;Data Source=testcomputer;"//testcomputer:computer name
"Initial Catalog=testdb;User Id=sa;Password=;",//testdb:database name
"", "", adConnectUnspecified);
pRst->Open(
"table1",
_variant_t((IDispatch *) pConn, true),
adOpenStatic,
adLockReadOnly,
adCmdTable);
_variant_t varint = pRst->GetFields()->GetItem("intfield")->GetValue();
_variant_t vardate=pRst->Fields->Item["datefield"]->Value;
SYSTEMTIME systime;
VariantTimeToSystemTime(vardate.date,&systime);
char mybuf[1024];
wsprintf(mybuf,"intvalue is '%d ,string date: %d/%d/%d,%d:%d:%d:%d'\n",varint.intVal,
systime.wYear,systime.wMonth,systime.wDay,
systime.wHour,systime.wMinute,systime.wSecond,systime.wMilliseconds);
::MessageBox(NULL,mybuf,"date",MB_OK);
pRst->Close();
pConn->Close();
}
catch (_com_error &e)
{
char buf[1024];
wsprintf(buf,"Description = '%s'\n", (char*) e.Description());
::MessageBox(NULL,buf,"error",MB_OK);
}
::CoUninitialize();
}
TheValue = m_pRecordset->GetCollect("No"); //int
no=TheValue.iVal;
TheValue= m_pRecordset->GetCollect("Date"); //date
COleDateTime mydate(TheValue.date);
TheValue = m_pRecordset->GetCollect("string"); //string
strcpy(my,(CString)TheValue.bstrVal);
则得到的_variant_t中_variant.vt = VT_DATE,
对应的时间为_variant.date
这个时间类型为微软标准的DATE类型,8bytes长
具体定义可以看msdn
要讲它转为string,可以用COleDateTime转,楼上的已经说了
如果你不用mfc你可以在COleDateTime的源文件拷出几个函数来转换
TCHAR szBuffer[MAX_PATH];
if(vat.vt = VT_DATE)
{
VariantTimeToSystemTime( var.date, &st);
sprintf(szBuffer, "%d-%d-%d %02d:%02d:%02d",
st.wYear,
st.wMonth,
st.wDay,
st.wHour,
st.wMinute,
st.wSecond );
}