#include <windows.h>
#include <sqltypes.h>
#include <sql.h>
#include <sqlext.h>
#include <iostream>
int main() {
// Declarar variables necesarias
SQLHENV henv;
SQLHDBC hdbc;
SQLHSTMT hstmt;
SQLRETURN retcode;
// Inicializar el entorno
retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);
// Inicializar la conexión
retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
retcode = SQLDriverConnect(hdbc, NULL, (SQLCHAR*)"DRIVER={SQL Server};SERVER=TuServidor;DATABASE=TuBaseDeDatos;UID=TuUsuario;PWD=TuContraseña;", SQL_NTS, NULL, 0, NULL, SQL_DRIVER_COMPLETE);
// Verificar la conexión
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {
std::cout << "Conexión exitosa." << std::endl;
// Crear una sentencia
retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
// Ejecutar una consulta de ejemplo
retcode = SQLExecDirect(hstmt, (SQLCHAR*)"SELECT * FROM TuTabla", SQL_NTS);
// Procesar los resultados
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {
SQLCHAR buffer[255];
SQLLEN cbValue;
// Recuperar y mostrar resultados
while (SQLFetch(hstmt) == SQL_SUCCESS) {
retcode = SQLGetData(hstmt, 1, SQL_C_CHAR, buffer, sizeof(buffer), &cbValue);
if (retcode == SQL_SUCCESS) {
std::cout << "Columna 1: " << buffer << std::endl;
}
}
}
// Liberar recursos
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
} else {
// Manejar error de conexión
SQLCHAR sqlstate[6], errmsg[SQL_MAX_MESSAGE_LENGTH];
SQLINTEGER nativeerr;
SQLGetDiagRec(SQL_HANDLE_DBC, hdbc, 1, sqlstate, &nativeerr, errmsg, sizeof(errmsg), NULL);
std::cerr << "Error de conexión: " << errmsg << std::endl;
}
// Cerrar la conexión
SQLDisconnect(hdbc);
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
SQLFreeHandle(SQL_HANDLE_ENV, henv);
return 0;
}