Sql server 如何从CDBVariant获取日期?
我正在尝试使用CDBVariant从sql server获取日期、月份、年份,但我无法做到这一点,我的代码如下 我想要的是用我自己的格式来记录一天,一个月,一年 像这样 1990年1月3日 在我的学生表中,我使用的是日期类型而不是日期/时间,因此我只想以自己的格式显示日期,因为我从数据库中获取的日期是年-月日期我想将其显示为日期-月-年 我无法将CDB变量::m_pdate转换为ctimeSql server 如何从CDBVariant获取日期?,sql-server,database,mfc,visual-studio-2015,odbc,Sql Server,Database,Mfc,Visual Studio 2015,Odbc,我正在尝试使用CDBVariant从sql server获取日期、月份、年份,但我无法做到这一点,我的代码如下 我想要的是用我自己的格式来记录一天,一个月,一年 像这样 1990年1月3日 在我的学生表中,我使用的是日期类型而不是日期/时间,因此我只想以自己的格式显示日期,因为我从数据库中获取的日期是年-月日期我想将其显示为日期-月-年 我无法将CDB变量::m_pdate转换为ctime CDBVariant date; rs.GetFieldValue(short(2),d
CDBVariant date;
rs.GetFieldValue(short(2),date);//
CTime a(date.m_pdate->year, date.m_pdate->month, date.m_pdate->day);
cout << " date is:" << a.GetYear() << endl;
a=NULL; //so the next value can be insert into ctime
rs.MoveNext(); // move to next tuple in table
}
cdb可变日期;
rs.GetFieldValue(短(2),日期)//
CTime a(date.m\u pdate->year,date.m\u pdate->month,date.m\u pdate->day);
cout将CDBVariant
转换为COleDateTime
的正确方法如下:
CDBVariant var;
if(var.m_dwType == DBVT_DATE)
{
COleDateTime timestamp(var.m_pdate->year,var.m_pdate->month,var.m_pdate->day,
var.m_pdate->hour,var.m_pdate->minute,var.m_pdate->second);
CString str = timestamp.Format(_T("%B %d, %Y"));
}
就我个人而言,我发现CDBVariant::m_dwType
报告的数据类型在与SQL数据结合使用时有点不可靠
最好的方法可能是首先使用CRecordset::GetODBCFieldInfo
函数检查返回的(SQL)数据类型,然后“告诉”CRecordset::GetFieldValue()
默认的C数据类型:
CRecordSet oSet; // Hold the set of records returned by SQL query
CDBVariant oVar; // get the variant values from the each of the fields in SQL resultSet
CODBCFieldInfo oFinfo; // to get the fieldinfo reported by ODBC
TIMESTAMP_STRUCT myDtm; // DateTime structure for accessing the components of dateTimes from SQL
... // some other code to populate the oSet
cnsNumOsetCols = oSet.GetODBCFieldCount();
// Iterate thru the columns in the oSet
for (idxCol = 0; idxCol < cnsNumOsetCols; idxCol++)
{
// Use the ODBC info from the resultSet
oSet.GetODBCFieldInfo((short)idxCol, oFinfo);
if ((oFinfo.m_nSQLType == SQL_DATE))
{
// Specify the C data type when retreiving the data from the variant
oSet.GetFieldValue((short)idxCol, oVar, SQL_C_DATE);
myDtm = oVar.m_pdate;
... // some other code to manipulate the date
}
}
CRecordSet;//保存SQL查询返回的记录集
CDB变异卵形;//从SQL结果集中的每个字段中获取变量值
CODBCFieldInfo of info;//获取ODBC报告的fieldinfo
时间戳_STRUCT myDtm;//用于从SQL访问dateTimes组件的DateTime结构
... // 其他一些填充oSet的代码
cnsNumOsetCols=oSet.GetODBCFieldCount();
//遍历oSet中的列
对于(idxCol=0;idxCol
但是,如果您不使用CRecordSet,而只使用CDBVVariant在运行时处理任何类型的数据,那么上述内容可能没有任何帮助。问题出在哪里?还要考虑编辑你的问题,删除与你的问题无关的代码。避免使用<代码>系统(“暂停”)< /代码>。使用cin.get()代码>改为。a=NULL代码>不会做你认为它会做的事情。您需要了解对象的生命周期,以及对象不是指针。考虑从数据库中获取一个或多个图书。我在数据库中得到的数据是在CDB-XORT变量中的2015-1215,所以我如何将它转换成实际可用的cTimeValabeLIT。您应该使用CString str=timestamp.Format(\u T(“%B%d,%Y”)
获取可打印字符串。问题是我从数据库获取的数据没有指向日期部分,因此我使用rs.GetFieldValue(L“date”,date,SQL\u C\u TIMESTAMP)代码>