2015-03-26 2 views
4

Я есть SQL Server таблицу:Как получить поле SQL Server DateTime в ODBC собственного клиента

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); 

Но я прибудете date Поле как массив массива в выводе: 2014-01-01 00: 00: 00.000 Как получить это поле, например, в формате FILETIME или в другом более удобном для C++ типе данных? Благодарю.

+2

Возможно, эти ссылки могут помочь вам: https://www.ibm.com/developerworks/community/forums/html/topic?id=77777777-0000-0000-0000-000013705031 и http: //docs.raima. com/rdms/8_3/Содержание/RM/Chapter17.htm – Garf365

ответ

4

Для типа даты вы должны использовать SQL_C_DATE или SQL_C_TIMESTAMP. Пример:

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); 

Надеюсь, что эта помощь.

+0

Это действительно полезно! Благодаря! –