Visual C++ .NET - Sql inmerso

 
Vista:

Sql inmerso

Publicado por d0ser (1 intervención) el 22/05/2009 07:43:18
Hola!!!

Necesito utilizar SQL inmerso C++ en VS2008. En internet hay muchísima información pero no estoy siendo capaz de utilizarla correctamente. Soy bastante novato y me gustaría saber si es necesario tener algunas librerías concretas. Así mismo, me gustaría ver algún código de ejemplo, sobre todo para ver que archivos de encabezado se utilizan.

Espero que alguien pueda ayudarme,

Gracias!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Conexión a SQL Server usando ODBC en Visual Studio 2008

Publicado por Alejandro (265 intervenciones) el 06/02/2024 23:51:57
¡Hola, D0ser! Para trabajar con SQL en C++ en Visual Studio 2008, puedes utilizar la biblioteca ODBC (Open Database Connectivity). Aquí tienes un ejemplo básico que muestra cómo conectar, ejecutar una consulta y obtener resultados usando ODBC:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#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;
}

Asegúrate de reemplazar los valores de `TuServidor`, `TuBaseDeDatos`, `TuUsuario`, `TuContraseña` y `TuTabla` con la información correcta para tu entorno. Además, debes tener configurado un DSN (Data Source Name) o especificar la cadena de conexión como se muestra en el ejemplo.

Para trabajar con SQL en C++, necesitas incluir los encabezados `sql.h` y `sqlext.h` y enlazar con la biblioteca `odbc32.lib`. Puedes configurar esto en las propiedades de tu proyecto en Visual Studio.

Recuerda que usar SQL de esta manera puede tener riesgos de seguridad, como la inyección de SQL. Se recomienda utilizar consultas preparadas o procedimientos almacenados para mitigar estos riesgos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar