Исходный текст CGI-модуля:
int main(int argc, char* argv[])
{
// определение системных переменных
SQLHENV sql_henv = SQL_NULL_HENV;
SQLHDBC sql_hdbc = SQL_NULL_HDBC;
SQLHSTMT sql_hstmt = SQL_NULL_HSTMT;
RETCODE err;
UCHAR sys_DSN[SQL_MAX_DSN_LENGTH + 1] = "Authors_DB";
UCHAR user_Name[MAXNAME] = "";
UCHAR user_Password[MAXNAME] = "";
// инициализация среды выполнения приложения
err = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &sql_henv);
// анализ кода ошибки
if (err != SQL_SUCCESS && err != SQL_SUCCESS_WITH_INFO) return 1;
// установка параметров среды выполнения приложения
err = SQLSetEnvAttr(sql_henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);
// анализ кода ошибки
if (err != SQL_SUCCESS && err != SQL_SUCCESS_WITH_INFO) return 1;
// инициализация среды соединения
err = SQLAllocHandle(SQL_HANDLE_DBC, sql_henv, &sql_hdbc);
if (err != SQL_SUCCESS && err != SQL_SUCCESS_WITH_INFO) return 1;
// установка соединения
err = SQLConnect(sql_hdbc, sys_DSN, (SWORD)strlen((const char*)sys_DSN), user_Name,
(SWORD)strlen((const char*)user_Name), user_Password, (SWORD)strlen((const char*)user_Password));
if (err != SQL_SUCCESS && err != SQL_SUCCESS_WITH_INFO)
{
printf("SQLConnect error\n");
return 1;
}
// получение идентификатора команд
err = SQLAllocHandle(SQL_HANDLE_STMT, sql_hdbc, &sql_hstmt);
if (err != SQL_SUCCESS && err != SQL_SUCCESS_WITH_INFO)
{
printf("SQLAllocHandle Error\n");
return 1;
}
// выполнение команды
err = SQLExecDirect(sql_hstmt, (unsigned char*) "SELECT * FROM Authors", SQL_NTS);
if (err != SQL_SUCCESS && err != SQL_SUCCESS_WITH_INFO)
{
printf("SQLExecDirect Error\n");
return 1;
}
// связывание указателей со значениями полей текущей записи
SQLCHAR id[30];
SQLCHAR name[30];
SQLCHAR year[30];
SQLINTEGER lid;
SQLINTEGER lname;
SQLINTEGER lyear;
err = SQLBindCol(sql_hstmt, 1, SQL_C_CHAR, id, 30, &lid);
err = SQLBindCol(sql_hstmt, 2, SQL_C_CHAR, name, 30, &lname);
err = SQLBindCol(sql_hstmt, 3, SQL_C_CHAR, year, 30, &lyear);
// вывод заголовка HTML-документа
char *d = "%";
printf("Content-type: text/html%c%c", 10, 10);
printf("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2//EN\"");
printf("<HTML><HEAD><TITLE>ODBC Connection Test</TITLE></HEAD><BODY>");
/* // вывод заголовка таблицы
printf("<TABLE Width='100%s' CellSpacing=10 CellPadding=10 Border=3>", d);
printf("<CAPTION Align='center'> Information from DataBase</CAPTION>");
printf("<TR><TH Width='100%s'>Id</TH><TH>Имя</TH>Год</TH></TR>", d);
// вывод строчек таблицы
while ((err = SQLFetch(sql_hstmt)) != SQL_NO_DATA)
{
printf("<TR><TD>%15s</TD><TD>%25s</TD><TD>%10s</TD></TR>", id, name, year);
}
printf("</TABLE>");
*/
printf("</BODY></HTML>");
// удаление служебных переменных
SQLFreeHandle(SQL_HANDLE_STMT, sql_hstmt);
SQLDisconnect(sql_hdbc);
SQLFreeHandle(SQL_HANDLE_DBC, sql_hdbc);
SQLFreeHandle(SQL_HANDLE_ENV, sql_henv);
return 0;
}
---
Источник данных: это стандартная (для примеров) БД на Access, расположенная по адресу D:\Inetpub\iissamples\sdk\asp\database\Authors.mdb. В администрировании компьютера указываю пользовательский DSN как "Authors_DB", определяю путь к БД и устанавливаю драйвер Microsoft Access driver (*.mdb). Не катит :(
|