#include <stdlib.h>
#include <stdio.h>
#if defined(_MSDOS) || defined(_WIN32)
#include <windows.h>
#endif
#include "sqlext.h"
int main(void) {
SQLHENV eh; /* Environment handle */
SQLHDBC ch; /* Connection handle */
SQLHSTMT sh; /* Statement handle */
if (SQLAllocHandle(SQL_HANDLE_ENV,
SQL_NULL_HANDLE, &eh)
!= SQL_SUCCESS) {
fprintf(stderr, "Kunde inte allokera "
"en ODBC-omgivning.\n");
return EXIT_FAILURE;
}
if (SQLSetEnvAttr(eh,
SQL_ATTR_ODBC_VERSION,
(SQLPOINTER)SQL_OV_ODBC3,
SQL_IS_INTEGER) != SQL_SUCCESS) {
fprintf(stderr,
"Kunde inte sätta ODBC-versionen.\n");
return EXIT_FAILURE;
}
if (SQLAllocHandle(SQL_HANDLE_DBC, eh, &ch)
!= SQL_SUCCESS) {
fprintf(stderr, "Kunde inte allokera "
"ett anslutningsobjekt.\n");
return EXIT_FAILURE;
}
if (SQLConnect(ch, (SQLCHAR*)"min_nya_databas",
SQL_NTS,
(SQLCHAR*)"root", SQL_NTS,
(SQLCHAR*)"SpGlk2Az", SQL_NTS)
!= SQL_SUCCESS) {
fprintf(stderr, "Kunde inte ansluta "
"till datakällan.\n");
return EXIT_FAILURE;
}
/* Allocate statement handle */
if (SQLAllocHandle(SQL_HANDLE_STMT, ch, &sh)
!= SQL_SUCCESS) {
fprintf(stderr, "Kunde inte allokera "
"ett statement handle.\n");
return EXIT_FAILURE;
}
if (SQLExecDirect(sh, (SQLCHAR*)
"select Nummer, Namn, Telefon "
"from Person", SQL_NTS)
!= SQL_SUCCESS) {
fprintf(stderr, "Kunde inte köra frågan.\n");
return EXIT_FAILURE;
}
printf("Personer:\n");
while (SQLFetch(sh) == SQL_SUCCESS) {
SQLINTEGER number;
SQLCHAR name[10 + 1];
SQLCHAR phone[10 + 1];
SQLINTEGER number_size, name_size, phone_size;
SQLGetData(sh, 1, SQL_C_SLONG, &number,
sizeof number, &number_size);
SQLGetData(sh, 2, SQL_C_CHAR, name,
sizeof name, &name_size);
SQLGetData(sh, 3, SQL_C_CHAR, phone,
sizeof phone, &phone_size);
printf("Nummer %d, med namnet %s "
" och telefonnummer %s.\n",
(int)number, name, phone);
} /* while rows in the result */
SQLFreeHandle(SQL_HANDLE_STMT, sh);
SQLDisconnect(ch);
SQLFreeHandle(SQL_HANDLE_DBC, ch);
SQLFreeHandle(SQL_HANDLE_ENV, eh);
return EXIT_SUCCESS;
} /* main */