ODBC-Programmierung per API |
SQLRETURN SQLAllocHandle(
SQLSMALLINT HandleTyp,
SQLHANDLE InHandle,
SQLHANDLE *OutHandle);
|
SQLRETURN SQLFreeHandle(
SQLSMALLINT HandleTyp,
SQLHANDLE FreeHandle);
|
| SQL_HANDLE_ENV | Ein Environmenthandle wird gesucht |
| SQL_HANDLE_DBC | Es wird ein Verbindungshandle angelegt |
| SQL_HANDLE_STMT | |
| SQL_HANDLE_DESC |
SQLRETURN SQLConnect(
HDBC hDBC,
UCHAR *strDSN,
SWORD lenDSN,
UCHAR *strUSER,
SWORD lenUSER,
UCHAR *strPASSWD,
SWORD lenPASSWD);
|
HENV hEnv;
HDBC hDBC;
SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hEnv);
SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);
SQLAllocHandle(SQL_HANDLE_DBC, hEnv, &hDBC);
if (hDBC) {
retCode = SQLConnect(hDBC, (UCHAR *)"testdb", SQL_NTS,
(UCHAR *)"adm",SQL_NTS,(UCHAR *)"adm",SQL_NTS);
...
SQLDisconnect(hDBC);
SQLFreeHandle(SQL_HANDLE_DBC, hDBC);
}
SQLFreeHandle(SQL_HANDLE_ENV, hEnv);
|
HDBC hDBC; HSTMT hStmt; SQLAllocHandle(SQL_HANDLE_STMT, hDBC, &hStmt) . . . SQLFreeHandle(SQL_HANDLE_STMT, hStmt); |
SQLRETURN SQLPrepare(
SQLHSTMT StatementHandle,
SQLCHAR * StatementText,
SQLINTEGER TextLength);
|
SQLRETURN SQLExecute(
SQLHSTMT StatementHandle);
|
Wird die Anweisung nur einmal ausgeführt, kann man beides in SQLExecDirect zusammenfassen.
SQLRETURN SQLExecDirect(
SQLHSTMT StatementHandle,
SQLCHAR * StatementText,
SQLINTEGER TextLength);
|
SQLRETURN SQLEndTran(
SQLSMALLINT HandleType,
SQLHANDLE Handle,
SQLSMALLINT CompletionType);
|
Dann wird festgelegt, welche Spalten interessieren. Es wird bei dieser Gelegenheit angegeben, in welchen Speicher die Daten gelangen sollen. Zu diesem Zweck wird SQLBindCol verwendet. Es bindet eine Spalte an einen Datenpuffer.
Schliesslich wird Zeile für Zeile mit dem Befehl SQLFetch die Ergebnismenge des SQL-Befehls in den Datenspeicher geholt.
SQLRETURN SQLBindCol(
SQLHSTMT StatementHandle,
SQLUSMALLINT ColumnNumber,
SQLSMALLINT TargetType,
SQLPOINTER TargetValuePtr,
SQLINTEGER BufferLength,
SQLINTEGER * StrLen_or_IndPtr);
|
| SQL_NO_TOTAL | |
| SQL_NULL_DATA |
Liefert als Rügabewert SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, oder SQL_INVALID_HANDLE.
HENV hEnv; // das Handle des Environment
HDBC hDBC; // das Handle der Datenbank
HSTMT hStmt; // das Handle fuer die Anweisung
RETCODE retCode;
char strPerformer[1024];
char strTitle[1024];
long len;
...
retCode = SQLAllocHandle(SQL_HANDLE_STMT, hDBC, &hStmt);
if (retCode==SQL_SUCCESS || retCode==SQL_SUCCESS_WITH_INFO) {
retCode = SQLExecDirect(hStmt, (UCHAR*)"SELECT Performer,Titel FROM Song", SQL_NTS);
if (retCode==SQL_SUCCESS || retCode==SQL_SUCCESS_WITH_INFO) {
SQLBindCol(hStmt, 1, SQL_C_CHAR, strPerformer, 1024, &len);
SQLBindCol(hStmt, 2, SQL_C_CHAR, strTitle, 1024, &len);
while (1) {
retCode = SQLFetch(hStmt);
if (retCode==SQL_SUCCESS || retCode==SQL_SUCCESS_WITH_INFO) {
MessageBox(hWnd, strTitle, strPerformer, MB_OK);
}else {
break;
}
}
} else {
MessageBox(hWnd,"ExecDirect failed", "bad", MB_OK);
}
SQLFreeHandle(SQL_HANDLE_STMT, hStmt);
}else{
MessageBox(hWnd,"Statement failed", "bad", MB_OK);
}
|
| Homepage | (C) Copyright 1999 Arnold Willemer |