C/Visual C - Conexion con base de datos

 
Vista:

Conexion con base de datos

Publicado por aprendiz (1 intervención) el 16/09/2005 15:00:15
Quisiera saber de como puedo interactuar con base de datos a traves de c

existe un modo particular para ello ??

Donde puedo obtener informacion

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

RE:Conexion con base de datos

Publicado por fernando.gomez (1604 intervenciones) el 19/09/2005 03:16:37
Usualmente las bases de datos proporcionan APIs para ello. Ejemplos son las librerías en C de MySQL o los componentes COM que proporciona SQL Server 2000.

Una forma estandarizada para hacer esto es empleando ODBC. Es un API extensa, pero finalmente es uniforme para cualquier base de datos (hoy en día, toda base de datos usualmente provée de "drivers" ODBC). Consulta en www.msdn.microsoft.com el API, no es muy complicado. En particular, las siguientes funciones son las que más emplearías para consultas sencillas:

SQLAllocEnv, SQLAllocConnect, SQLDriverConnect - necesarias para establecer la conexión con la base de datos.

SQLAllocStmt, SQLExecDirect - ejecutan comandos SQL sobre la base de datos.

SQLFetch, SQLGetData - obtienen datos de la consulta SQL, como los resultados de stored procedures, o result sets.

SQLDisconnect, SQLFreeStmt, SQLFreeConnect, SQLFreeEnv - operaciones de limpieza de memoria y desconexión a la base de datos.

Los siguientes son ejemplos que saqué de MSDN. El primero muestra cómo conectarte, y el segundo, cómo obtener datos una vez ya conectado.

EJEMPLO 1:
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <sql.h>
#include <sqlext.h>
#include <sqltypes.h>
#include <odbcss.h>

SQLHENV henv = SQL_NULL_HENV;
SQLHDBC hdbc1 = SQL_NULL_HDBC;
SQLHSTMT hstmt1 = SQL_NULL_HSTMT;

int main() {
RETCODE retcode;
UCHAR szDSN[SQL_MAX_DSN_LENGTH+1] = "MyDSN",
szUID[MAXNAME] = "sa",
szAuthStr[MAXNAME] = "MyPassword";

// Allocate the ODBC Environment and save handle.
retcode = SQLAllocHandle (SQL_HANDLE_ENV, NULL, &henv);

// Notify ODBC that this is an ODBC 3.0 application.
retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,
(SQLPOINTER)SQL_OV_ODBC3,
SQL_IS_INTEGER);

// Allocate an ODBC connection handle and connect.
retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc1);
retcode = SQLConnect(hdbc1, szDSN, (SWORD)strlen(szDSN),
szUID, (SWORD)strlen(szUID),
szAuthStr, (SWORD)strlen(szAuthStr));
if ( (retcode != SQL_SUCCESS) &&
(retcode != SQL_SUCCESS_WITH_INFO) ) {
// Connect failed, call SQLGetDiagRec for errors.
}
else {
// Connects to SQL Server always return
// informational messages. These messages can be
// retrieved by calling SQLGetDiagRec.
}

// Allocate statement handles and do ODBC processing.

/* Clean up. */
SQLDisconnect(hdbc1);
SQLFreeHandle(SQL_HANDLE_DBC, hdbc1);
SQLFreeHandle(SQL_HANDLE_ENV, henv);
return(0);
}

EJEMPLO 2:

#define NAME_LEN 50
#define PHONE_LEN 50

SQLCHAR szName[NAME_LEN], szPhone[PHONE_LEN];
SQLINTEGER sCustID, cbName, cbAge, cbBirthday;
SQLRETURN retcode;
SQLHSTMT hstmt;

retcode = SQLExecDirect(hstmt,
"SELECT CUSTID, NAME, PHONE FROM CUSTOMERS ORDER BY 2, 1, 3",
SQL_NTS);

if (retcode == SQL_SUCCESS) {
while (TRUE) {
retcode = SQLFetch(hstmt);
if (retcode == SQL_ERROR || retcode == SQL_SUCCESS_WITH_INFO) {
show_error();
}
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO){

/* Get data for columns 1, 2, and 3 */

SQLGetData(hstmt, 1, SQL_C_ULONG, &sCustID, 0, &cbCustID);
SQLGetData(hstmt, 2, SQL_C_CHAR, szName, NAME_LEN, &cbName);
SQLGetData(hstmt, 3, SQL_C_CHAR, szPhone, PHONE_LEN,
&cbPhone);

/* Print the row of data */

fprintf(out, "%-5d %-*s %*s", sCustID, NAME_LEN-1, szName,
PHONE_LEN-1, szPhone);
} else {
break;
}
}
}

Saludos.
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