Especificación: | CLI de DB2 2.1 | ODBC 1.0 | ISO CLI |
SQLConnect() establece una conexión con la base de datos destino.
Antes de invocar esta función se debe asignar un descriptor de conexión utilizando SQLAllocHandle().
Esta función se debe invocar antes de asignar un descriptor de sentencia utilizando SQLAllocHandle().
Sintaxis
SQLRETURN SQLConnect ( SQLHDBC ConnectionHandle, /* hdbc */ SQLCHAR *FAR ServerName, /* szDSN */ SQLSMALLINT NameLength1, /* cbDSN */ SQLCHAR *FAR UserName, /* szUID */ SQLSMALLINT NameLength2, /* cbUID */ SQLCHAR *FAR Authentication, /* szAuthStr */ SQLSMALLINT NameLength3); /* cbAuthStr */
Argumentos de la función
Tabla 36. Argumentos de SQLConnect
Tipo de datos | Argumento | Uso | Descripción |
---|---|---|---|
SQLHDBC | ConnectionHandle | entrada | Descriptor de contexto de conexión. |
SQLCHAR * | ServerName | entrada | Ubicación y nombre de la base de datos. El nombre es opcional. DB2 Everyplace no tiene en cuenta el nombre. |
SQLSMALLINT | NameLength1 | entrada | Longitud del contenido del argumento ServerName. |
SQLCHAR * | UserName | entrada | Nombre de autorización (identificador de usuario). Esta serie se utiliza con cifrado; en otro caso, DB2 Everyplace la ignora. |
SQLSMALLINT | NameLength2 | entrada | Longitud del contenido del argumento UserName. |
SQLCHAR * | Authentication | entrada | Serie de caracteres de autenticación (contraseña). Esta serie se utiliza con cifrado; en otro caso, DB2 Everyplace la ignora. |
SQLSMALLINT | NameLength3 | entrada | Longitud del contenido del argumento Authentication. |
Notas
Un usuario no registrado (alguien que no existe en la tabla DB2eSYSUSERS) recibirá el mensaje de aviso, 42704 (objeto no definido) al intentar conectar con una base de datos DB2 Everyplace cifrada durante una llamada a la función SQLGetDiagRec() de CLI. Un usuario registrado no recibirá este aviso. En cambio, tanto un usuario registrado como un usuario no registrado pueden conectar con la base de datos durante la llamada a la función SQLConnect() y no recibirán un mensaje de aviso.
Uso
SQLConnect() se puede utilizar para conectar con fuentes de datos en ubicaciones distintas.
Para acceder a una fuente de datos en un dispositivo local, se establece el argumento ServerName en un nombre de fuente de datos. DB2 Everyplace ignora el nombre de la fuente de datos y se accede a la fuente de datos local.
Para aplicaciones que utilizan dispositivos de almacenamiento secundario, el argumento ServerName acepta una serie que apunte a la ubicación de una DataSource que existe localmente o que existe en un dispositivo de almacenamiento secundario soportado tales como IBM Microdrive, Sony Memory Stick, Compact Flash, SD Memory Card o MultiMediaCard. El formato de la serie ServerName es el siguiente:
ServerName=Device:/Path/DataSource
ServerName=#:/storage/
DB2 Everyplace se conecta a DataSource en el directorio storage de IBM Microdrive en la primera ranura CF.
ServerName=dir1/dir2/DATA1
Para acceder a un procedimiento almacenado remoto utilizando el adaptador de Consulta remota y Procedimiento almacenado, se utiliza el argumento ServerName para identificar la ubicación y el nombre de la base de datos. Para aplicaciones que utilizan el adaptador de Consulta remota y Procedimiento almacenado para acceder a bases de datos remotas, el argumento ServerName acepta el formato URL:
http://IPAddress:portNumber/path?DB=DataSource
Se necesitan IPAddress y Authentication.
Si utiliza almacenamiento de objetos de Windows CE en lugar de un sistema de archivos convencional, deberá:
o bien
En el almacenamiento de objetos de Windows CE no existe el concepto de "directorio". Cuando se utiliza el almacenamiento de objetos, el usuario no puede especificar el directorio, o vía de acceso, en que se crean las tablas. Todas las tablas del almacenamiento de objetos se crean en el mismo espacio de nombres. Debido a esta limitación, no se pueden establecer varias conexiones simultáneas con el almacenamiento de objetos. A efectos de serialización de conexiones, el archivo de bloqueo se crea en la vía de acceso raíz del sistema de archivos.
Cuando se utiliza almacenamiento de objetos, los archivos DB2 Everyplace no se pueden suprimir de forma manual, a diferencia de la utilización de un sistema de archivos convencional.
Ejemplos
Para conectar con la fuente de datos situada localmente en c:\dir1\dir2\. Se ignora el nombre de fuente de datos DS1:
ServerName=c:/dir1/dir2/DS1
Para conectar localmente con la fuente de datos situada en /dir1/dir2/ utilizando la notación de sistema de archivos propia de UNIX:
ServerName=/dir1/dir2/
Para conectar con la fuente de datos situada localmente en el directorio dir1\, relativo a la vía de acceso de la aplicación. Si la aplicación está situada en c:\myapp\, se accede a la fuente de datos de c:\myapp\dir1\:
ServerName=dir1\
Para conectar con la fuente de datos situada en el directorio /dir1/ de la memoria de almacenamiento en la ranura 1 del almacenamiento intermedio:
ServerName=#1:/dir1/
Conectar con el DB2 Everyplace Sync Server 192.168.0.1 en el puerto 8080 y con la base de datos mysample utilizando el adaptador de consulta remota y procedimiento almacenado.
ServerName= http://192.168.0.1:8080/db2e/servlet/com.ibm.mobileservices.adapter .agent.AgentServlet?DB=mysample
Conectar con la fuente de datos utilizando el almacenamiento de Windows CE.
ServerName=@:\
Serialización de conexiones
Consulte el apartado Serialización de conexiones para obtener información sobre la serialización de la conexión.
Autentificación de conexiones
El cifrado de una base de datos requiere una autentificación rudimentaria del usuario. DB2 Everyplace utiliza el UserName y la Authentication para autentificar el usuario durante la conexión.
La autentificación funciona del modo siguiente: Si la tabla de catálogos de DB2eSYSUSERS no existe en la base de datos con la que conecta SQLConnect, se ignora la información de UserName y Authentication. DB2 Everyplace distingue entre usuarios registrados y no registrados. Un usuario registrado es un usuario que está relacionado en la tabla DB2eSYSUSERS y que se ha añadido mediante la sentencia GRANT SQL. Durante la conexión, si existe una tabla DB2eSYSUSERS y el UserName pertenece a un usuario registrado, se intenta la autentificación. Si la contraseña suministrada en el parámetro Authentication no es correcta, se devuelve un error (42505). Si el UserName no está registrado, la función SQLConnect resultará satisfactoria. Sin embargo, una llamada posterior a SQLGetDiagRec devolverá el aviso 42704 (objeto no definido). Esto permite que las aplicaciones distingan entre el caso de un usuario registrado que se conecta satisfactoriamente y un usuario no registrado que se conecta satisfactoriamente. Para obtener más información, vea el Visión general del cifrado local de los datos, *** y GRANT.
Códigos de retorno
Diagnósticos
Tabla 37. SQLSTATE de SQLConnect
SQLSTATE | Descripción | Explicación |
---|---|---|
08001 | No se puede conectar con la fuente de datos. | CLI de DB2 no puede establecer una conexión con la fuente de datos (servidor). |
08002 | Conexión en uso. | El descriptor de conexión (ConnectionHandle) especificado ya se ha utilizado para establecer una conexión con una fuente de datos y la conexión todavía está abierta. |
08004 | El servidor de aplicaciones rechazó el establecimiento de la conexión. | La fuente de datos (servidor) rechazó el establecimiento de la conexión. |
58004 | Error inesperado del sistema. | Error no recuperable del sistema. |
HY001 | Error de asignación de memoria. | CLI de DB2 no puede asignar la memoria necesaria para ejecutar o finalizar la función. |
HY013 | Error inesperado de gestión de la memoria. | CLI de DB2 no puede acceder a la memoria necesaria para ejecutar o finalizar la función. |
HY501 | Nombre no válido de la DataSource. | El nombre de DataSource especificado no es válido. |
HYT00 | Ha transcurrido el tiempo de espera de conexión. | El tiempo de espera ha transcurrido antes de que la aplicación pudiera conectar con la fuente de datos. El período de tiempo de espera se puede establecer mediante el atributo SQL_ATTR_LOGIN_TIMEOUT de SQLSetConnectAttr(). Se devuelve este error cuando hay otra aplicación que está utilizando la base de datos. |
Restricciones
Se debe invocar SQLConnect() para poder ejecutar cualquier sentencia de SQL.
Conceptos relacionados
Consulta relacionada