vc ADO se conecta a la base de datos SQL SERVER
Colección de base de datos de acceso ADO de palabras clave
Nombre del autor original Sang Chang
Introducción
Una guía completa para el acceso de VC ADO a la base de datos, que presenta cada objeto y método de acceso de VC ADO a la base de datos. Cada método es muy clásico, muy práctico y vale la pena echarle un vistazo.
Texto
1. Descripción general de ADO
ADO es una aplicación fácil de usar diseñada por Microsoft para el paradigma de acceso a datos más reciente y potente, OLE DB. interfaz de capa. ADO le permite escribir aplicaciones que acceden y manipulan datos en un servidor de base de datos a través de un proveedor OLE DB. Las principales ventajas de ADO son la facilidad de uso, la velocidad, el bajo consumo de memoria y el tamaño reducido del disco. ADO utiliza un tráfico de red mínimo en casos de uso críticos y capas mínimas entre el front-end y las fuentes de datos, todo para proporcionar una interfaz liviana y de alto rendimiento. Se llama ADO porque hace alusión a la interfaz más familiar de Automatización OLE.
OLE DB es un conjunto de interfaces del Modelo de objetos componentes (COM) y una nueva interfaz de base de datos subyacente que encapsula las funciones de ODBC y proporciona acceso unificado a los datos almacenados en diferentes fuentes de información. OLE DB es la base tecnológica de la estrategia UDA (Universal Data Access) de Microsoft. OLE DB se puede instalar en cualquier fuente de datos. Es una forma poderosa y eficiente de crear y administrar datos desde cualquier fuente de datos. OLE DB es la base de cualquier fuente de datos, no una parte de la fuente de datos. LE DB no se limita a ISAM, Jet o incluso fuentes de datos relacionales. Puede trabajar con cualquier tipo de datos, independientemente del formato y almacenamiento. En la práctica, esta versatilidad significa acceder a datos desde hojas de cálculo de Excel, archivos de texto, servicios de directorio/correo electrónico e incluso servidores de correo como Microsoft Exchange. Sin embargo, si bien la interfaz de programación de aplicaciones OLE DB está diseñada para proporcionar una funcionalidad óptima para una variedad de aplicaciones, no es sencilla. La API que necesita es un puente entre su aplicación y OLE DB, y ese es ActiveX Data Objects (ADO).
2. Utilice ADO en VC (los pasos de desarrollo son muy buenos :)
1 Introduzca el archivo de biblioteca ADO
Antes de usar ADO, debe agregarlo. al stdafx del proyecto. h Utilice símbolos introducidos directamente en el archivo de encabezado para #importar el archivo de la biblioteca ADO para que el compilador pueda compilar correctamente. El código es el siguiente:
Utilice #import para introducir el archivo de biblioteca ADO
#import "c:\program files\common files\system\ado\msado15.dll "no_namespaces rename("EOF" adoEOF") <
Esta línea declara que ADO se utilizará en el proyecto, pero no en el espacio de nombres ADO, y cambia el nombre de la constante EOF a adoEOF para evitar conflictos constantes.
Ahora puede utilizar la interfaz ADO sin agregar otro archivo de encabezado
2 Inicialice el entorno de la biblioteca OLE/COM
Cabe señalar que la biblioteca ADO es un conjunto. de bibliotecas dinámicas COM. , lo que significa que la aplicación debe inicializar el entorno de la biblioteca OLE/COM antes de llamar a ADO. En las aplicaciones MFC, un mejor enfoque es inicializar el entorno de la biblioteca OLE/COM en la función miembro InitInstance de la clase principal de la aplicación.
BOOL CMyAdoTestApp::InitInstance()
{
if(!AfxOleInit())//esto es para inicializar la biblioteca COM
{
AfxMessageBox("¡Error de inicialización OLE!")
return FALSE
}
..... .
}
3. Introducción a la interfaz ADO
La biblioteca ADO contiene tres interfaces básicas: la interfaz _ConnectionPtr, la interfaz _CommandPtr y la interfaz _RecordsetPtr.
La interfaz _ConnectionPtr devuelve un conjunto de registros o un puntero nulo. Normalmente se utiliza para crear conexiones de datos o ejecutar declaraciones SQL que no devuelven ningún resultado (como procedimientos almacenados). No es una buena práctica utilizar la interfaz _ConnectionPtr para devolver un conjunto de registros. Las operaciones que devuelven registros normalmente se implementan mediante _RecordserPtr. Cuando usa _ConnectionPtr, para obtener la cantidad de registros, debe recorrer todos los registros; mientras usa _RecordserPtr, no necesita hacer esto.
La interfaz _CommandPtr devuelve un conjunto de registros. Proporciona una manera sencilla de ejecutar procedimientos almacenados y declaraciones SQL que devuelven conjuntos de registros. Cuando utilice la interfaz _CommandPtr, puede utilizar la interfaz global _ConnectionPtr o utilizar la cadena de conexión directamente en la interfaz _CommandPtr. Esta última es una mejor opción si sólo realiza una o unas pocas operaciones de acceso a datos. Sin embargo, si accede a la base de datos con frecuencia y devuelve muchos conjuntos de registros, debe usar la interfaz global _ConnectionPtr para crear una conexión de datos y luego usar la interfaz _CommandPtr para ejecutar procedimientos almacenados y declaraciones SQL.
_RecordsetPtr es el objeto del conjunto de registros. En comparación con los dos objetos anteriores, proporciona más control sobre el conjunto de registros, como bloqueo de registros, control del cursor, etc. Al igual que la interfaz _CommandPtr, no tiene que utilizar una conexión de datos ya creada; puede asignar la cadena de conexión a la variable miembro de conexión de _RecordsetPtr para que cree su propia conexión de datos en lugar de un puntero de conexión. Si está trabajando con varios conjuntos de registros, es mejor usar la misma interfaz global _ConnectionPtr que el objeto Command
y haber creado la conexión de datos, y luego usar _RecordsetPtr para ejecutar los procedimientos almacenados y las declaraciones SQL.
4. Utilice la interfaz _ConnectionPtr
_ConnectionPtr es principalmente una interfaz de conexión que se utiliza para obtener una conexión a la base de datos. Su cadena de conexión puede escribirse directamente por sí misma o puede apuntar a un DSN ODBC.
_ConnectionPtr pConn;
if (FAILED(pConn.CreateInstance("ADODB.Connection")))
{
AfxMessageBox( "¡Error al crear instancia!");
return;
}
CString strSRC;
strSRC="Driver=SQL Server; Servidor=";
strSRC+="suppersoft";
strSRC+="; Base de datos strSRC+="; Base de datos=";
strSRC+="mydb";
strSRC+=";UID=SA;PWD=";
CString strSQL = "Insertar en valores de estudiante(no,nombre,sexo, dirección)(3, "aaa", "masculino", "beijing")";
_variant_t varSRC(strSRC);
_variant_t varSQL(strSQL);
_bstr_t bstrSRC( strSRC);
if (FAILED(pConn->Open(bstrSRC, "", "", "",-1)))
{
AfxMessageBox("Puede no abrir la base de datos ");
pConn.Release();
return;
}
COleVariant vtOptional((long) DISP_E_PARAMNOTFOUND,VT_ERROR);
pConn->Ejecutar(_bstr_t (strSQL),&vtOptional,-1);
pConn.Release(); "ok!");
5. Utilice la interfaz _RecordsetPtr (como ejemplo de conexión a SQL Server)
_ RecordsetPtr pPtr
if (FALLADO). ( pPtr.CreateInstance("ADODB.Recordset")))
{
AfxMessageBox("¡Error al crear la instancia!"); p >
}
CString strSRC
strSRC="Driver=SQL Server;Servidor=";
strSRC+="210.46.141.145";
strSRC+="210.46.141.145"
strSRC+=";Base de datos=";
strSRC+="mydb"
strSRC+ =";UID=sa;PWD=";
strSRC+="sa";
CString strSQL = "seleccione id, nombre.género, dirección de personal"; p >
_variant_t varSRC(strSRC);
_variant_t);
varSQL(strSQL);
if(FAILED(pPtr->Open(varSQL, varSRC,adOpenStatic,adLockOptimistic,adCmdText)))
{
AfxMessageBox( "¡Error al abrir la tabla! Devuelve FALSE;
}
while(" ");
ptr.
while(!pPtr- >GetadoEOF())
{
_variant_t varNo
_variant_t varName
_variant_t varSex; _variant_t varAddress;
varNo = pPtr->GetCollect("id");
varName = pPtr->GetCollect("nombre"); pPtr->GetCollect("género");
varAddress = pPtr->GetCollect("dirección");
CString strNo = (char *)_bstr_t(varNo); p>
p>
CString strName = (char *)_bstr_t(varName);
CString strSex = (char *)_bstr_t(varSex);
CString strAddress); = (char *) _bstr_t( varAddress);
strNo.
strNo.setItemText (nItem,0,strNo);
m_list. nItem,1,strName );
m_list.SetItemText (nItem,2,strSex
m_list.SetItemText (nItem,3,strAddress); pPtr->MoveNext( );
}
pPtr->Cerrar();
pPtr.Release(); Utilice la interfaz _CommandPtr
La interfaz _CommandPtr devuelve un objeto de conjunto de registros y proporciona más control sobre el conjunto de registros. El siguiente es un ejemplo de código que utiliza la interfaz _CommandPtr: CommandText="select * from Student"
pCommand->CommandType=adCmdText;
pCommand->Parámetros->Refresh();
pRs = pCommand->Ejecutar(NULL,NULL,adCmdUnknown);
_variant_t varValue = pRs->GetCollect("name");
CString strValue=(char*)_ bstr_t(varValue);
6. conversión de tipos de datos Dado que los objetos COM son multiplataforma, utilizan métodos comunes para manejar varios tipos de datos.
Por lo tanto, la clase Cstring y los objetos COM son incompatibles.
Un conjunto de API para convertir objetos COM y datos de tipo C++. _vatiant_t y _bstr_t son dos de esos objetos. Proporcionan métodos comunes para convertir objetos COM y datos de tipo C++.