本文介绍了如何在ODBC本机客户端中获取SQL Server DateTime字段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有SQL Server表:
I'm have SQL Server table:
CREATE TABLE [dbo].[Table1](
[rec_id] [int] IDENTITY(1,1) NOT NULL,
[id] [int] NOT NULL,
[date] [datetime] NOT NULL,
[ps] [varchar](200) NULL
) ON [PRIMARY]
我通过代码获取数据:
status = SQLExecDirect(statement, (SQLWCHAR*)TEXT("SELECT * FROM [DBNAME].[dbo].[Table1]"), SQL_NTS);
cout << "SQLExecDirect returned " << status << "\r\n";
if (status == SQL_SUCCESS_WITH_INFO || status == SQL_SUCCESS)
{
int rec_id;
int id;
char date[64];
char ps[201] = { 0 };
while (SQLFetch(statement) == SQL_SUCCESS)
{
SQLGetData(statement, 1, SQL_C_ULONG, &rec_id, 0, NULL);
SQLGetData(statement, 2, SQL_C_ULONG, &id, 0, NULL);
SQLGetData(statement, 3, SQL_C_CHAR, date, 64, NULL);
SQLGetData(statement, 4, SQL_C_CHAR, ps, 201, &len);
cout << rec_id << " " << id << " " << date << " " << ps << " " << len << endl;
}
}
cout << "Connected;";
cin.get();
SQLDisconnect(connectHandle);
但是我得到日期
字段为char数组输出:2014-01-01 00:00:00.000
如何获取此字段,例如,以FILETIME格式或其他更方便的C ++数据类型?谢谢。
But I'm get date
field as char array in output: 2014-01-01 00:00:00.000How to get this field, for example, in FILETIME format or in other more convenient C++ data type? Thanks.
推荐答案
对于日期类型,您应该使用SQL_C_DATE或SQL_C_TIMESTAMP。示例:
For date type, you should use SQL_C_DATE or SQL_C_TIMESTAMP. Example:
TIMESTAMP_STRUCT ts;
SQLLEN len;
SQLGetData(hstmt, 3, SQL_C_TIMESTAMP, &ts, sizeof(ts), &len);
printf("Date: %d-%d-%d %d:%d:%d.%d (%ld)\n",
ts.year, ts.month,ts.day, ts.hour, ts.minute, ts.second, ts.fraction, len);
希望这个帮助。
这篇关于如何在ODBC本机客户端中获取SQL Server DateTime字段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!