Omslaget. Klicka här för att gå till bokens hemsida.

Databasteknik: Kodexempel ur avsnitt 20.6.1: C-program med ODBC-anrop (s 375-377)

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


Av Thomas Padron-McCarthy (e-post: boken@databasteknik.se)
Senaste ändring: 30 juli 2005