#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 */