**************************************************************** MICROSOFT SQL SERVER CONTROLADOR ODBC DE MICROSOFT SQL SERVER VERSION 3.6 ARCHIVO LÉAME DE INSTALACIÓN **************************************************************** (c) 1998 Microsoft Corporation. Reservados todos los derechos. Este archivo describe el uso del controlador ODBC de Microsoft SQL Server versión 3.6 con los servidores SQL de Microsoft versión 6.5 o anterior. Los temas tratados son: 1. Introducción 2. Instalación de Instcat.sql en el servidor 3. Obtención de las bibliotecas de red del cliente de SQL Server 4. Fuentes documentales referentes al uso de ODBC con SQL Server 5. Uso del controlador en un entorno de desarrollo 6. Problemas de compatibilidad **************************************************************** 1. Introducción La versión 3.6 del controlador ODBC de Microsoft SQL Server es una versión de Win32. Se puede usar con aplicaciones escritas para las API de ODBC 2.X o de ODBC 3.X. El controlador funciona con Microsoft SQL Server versión 4.21a o posterior. El controlador se puede ejecutar tanto en Windows 95 como en Windows NT (versión 4.0 o posterior). También hay instalada una nueva versión de la utilidad Configuración del cliente de SQL Server de Win 32 con la versión 3.6 del controlador ODBC de SQL Server. Esta utilidad de Configuración del cliente de SQL Server se puede utilizar con Microsoft SQL Server versión 4.21a o posterior y con las bibliotecas de red del cliente incluidas con esas versiones de SQL Server. **************************************************************** 2. Instalación de Instcat.sql en el servidor El controlador ODBC de SQL Server utiliza un conjunto de procedimientos almacenados de sistema, conocido como procedimientos almacenados de catálogo, para obtener información del catálogo de sistema de SQL Server. Cada versión del controlador ODBC de Microsoft SQL Server se ha desarrollado para que funcione con una versión determinada de los procedimientos almacenados de catálogo. El archivo Instcat.sql incluido con la versión 3.6 del controlador ODBC de SQL Server incluye ligeras modificaciones en los procedimientos almacenados de catálogo que actualizan los procedimientos a las versiones utilizadas por este controlador. El administrador del sistema SQL Server debe usar la secuencia Instcat.sql para actualizar los procedimientos almacenados de catálogo y asegurar el funcionamiento correcto del controlador. La actualización de los procedimientos almacenados de catálogo no afecta al funcionamiento de los clientes de SQL Server más antiguos. Esto se debe hacer con todas las versiones de Microsoft SQL Server, desde 4.21a a 6.5. Para actualizar los procedimientos almacenados de catálogo, el administrador del sistema ejecuta una secuencia utilizando la utilidad isql (vea las siguientes instrucciones). Antes de hacer cambios en la base de datos principal, el administrador del sistema debe hacer una copia de seguridad de la misma. Para ejecutar isql, el equipo debe estar instalado como una estación de trabajo cliente de Microsoft SQL Server. Junto al símbolo del sistema, use la utilidad isql para ejecutar la secuencia Instcat.sql. Por ejemplo: C:> ISQL /Usa /Psa_contraseña /Snombre_de_servidor /iubicación\Instcat.Sql donde sa_contraseña Es la contraseña del administrador del sistema. nombre_de_servidor Es el nombre del servidor en el que reside SQL Server. ubicación Es la ruta de acceso completa a la ubicación de Instcat.Sql. La secuencia Instcat.sql genera muchos mensajes. La mayoría de éstos indican a cuántas filas afectan las instrucciones Transact-SQL emitidas por la secuencia. Se puede ignorar la mayoría de estos mensajes, aunque se debe inspeccionar el resultado por si alguno de ellos indica un error de ejecución. Cuando se ejecuta Instcat.sql frente a un servidor SQL versión 6.0, se puede ignorar el mensaje que indica que el objeto sp_MS_upd_sysobj_category no existe. El último mensaje debe indicar que Instcat.sql se ha completado satisfactoriamente. La secuencia Instcat.sql da error cuando no hay suficiente espacio disponible en la base de datos principal para almacenar los procedimientos almacenados de catálogo o para registrar los cambios en los procedimientos existentes. **************************************************************** 3. Obtención de las bibliotecas de red del cliente de SQL Server El controlador ODBC de Microsoft SQL Server usa las bibliotecas de red del cliente de Microsoft SQL Server para comunicar con el servidor. La versión 3.6 del controlador ODBC de SQL Server utiliza también la utilidad Configuración del cliente de SQL Server para administrar la biblioteca de red asociada con un origen de datos ODBC. La versión 3.6 del controlador ODBC de SQL Server instala solamente una biblioteca de red, la biblioteca de red de canalización con nombre de Win32, Dbnmpntw.dll. Puede utilizar la versión 3.6 del controlador ODBC de SQL Server con bibliotecas de red de Win32 más antiguas. Si para conectar con SQL Server es necesaria una biblioteca de red de canalización con nombre distinta, puede utilizar la biblioteca de red incluida con la versión de Microsoft SQL Server. Puede obtener las bibliotecas de red de SQL Server instalando las utilidades del cliente de SQL Server de Win32 incluidas en la versión de Microsoft SQL Server. La versión de la utilidad Configuración del cliente de SQL Server instalada con la versión 3.6 del controlador ODBC de SQL Server se puede usar con las bibliotecas de red de cliente de SQL Server 4.21a o versiones posteriores. **************************************************************** 4. Fuentes documentales referentes al uso de ODBC con SQL Server La versión 3.6 del controlador ODBC de Microsoft SQL Server se ajusta a la documentación existente de SQL Server 6.5 en lo que se refiere a información específica acerca del controlador. Para obtener información acerca de las características específicas del controlador, vea los manuales de SQL Server y los libros en pantalla. La versión 3.6 del controlador ODBC de Microsoft SQL Server se ajusta también a la información adicional relativa al controlador descrita en la nota técnica "Using ODBC with Microsoft SQL Server," disponible en el sitio Web de Microsoft, en: http://www.microsoft.com/sql/reskit.htm El archivo Sqlsodbc.hlp incluido con la versión 3.6 del controlador ODBC de SQL Server contiene solamente ayuda contextual referente al asistente para orígenes de datos ODBC de SQL Server. El archivo Drvssrvr.hlp incluido con versiones anteriores del controlador ODBC de Microsoft SQL Server contenía información específica del controlador en relación con versiones anteriores del mismo. La información contenida en versiones anteriores del archivo Drvssrvr.hlp se ha copiado en el manual de SQL Server 6.5 "Programming ODBC for Microsoft SQL Server." **************************************************************** 5. Uso del controlador en un entorno de desarrollo El controlador ODBC de Microsoft SQL Server utiliza parámetros específicos del controlador para distintas llamadas a funciones ODBC. Las definiciones de estos parámetros específicos del controlador y de las estructuras de programación de C y C++ están incluidas en el archivo Odbcss.h. La versión 3.6 del controlador ODBC de SQL Server funciona con el archivo Odbss.h que se proporciona en las siguientes fuentes: SQL Server Service Pack 2 (SP2) o posterior. El paquete se puede descargar desde el sitio Web de Microsoft en http://www.microsoft.com/sql/ServicePak.htm. ODBC 3.0 SDK. El SDK de ODBC 3.0 SDK forma parte de Microsoft Developer Network Professional edition. El SDK se puede descargar desde el sitio Web de Microsoft en http://www.microsoft.com/odbc. El SDK también está disponible en Microsoft Press, en "Microsoft ODBC 3.0 Software Development Kit and Programmer's Reference." **************************************************************** 6. Problemas de compatibilidad La versión 3.6 del controlador ODBC de SQL Server muestra un nuevo asistente al agregar o configurar orígenes de datos en la utilidad Administrador de ODBC, o cuando una aplicación llama a SQLConfigDataSource y pide al controlador que solicite información al usuario. Haga clic en el botón Ayuda del asistente para tener acceso a la documentación del mismo. En la versión 2.65 del controlador ODBC de SQL Server incluido con SQL Server 6.5, SQL_COPT_SS_PERF_QUERY_INTERVAL funcionaba en segundos, en vez de en milésimas de segundo, según se indicaba en la documentación (vea el artículo Q157753 de la Base de conocimientos). En la versión 3.6 del controlador ODBC de SQL Server, SQL_COPT_SS_PERF_QUERY_INTERVAL ha cambiado y funciona en milésimas de segundo, como se indica en la documentación. Los cambios siguientes afectan solamente a las aplicaciones escritas con la API 3.X de ODBC. No afectan a las aplicaciones escritas con la API 2.X de ODBC. Estos cambios no deben afectar al procesamiento del conjunto de resultados en la mayoría de las aplicaciones ODBC. En versiones anteriores del controlador ODBC de SQL Server, las instrucciones PRINT o RAISERROR contiguas de un procedimiento almacenado o por lotes devolvían sus mensajes a la vez, en un conjunto de resultados. En la versión 3.6 del controlador ODBC de SQL Server, los mensajes de cada instrucción SQL se devuelven en conjuntos de resultados diferentes. Debe llamar a SQLMoreResults entre cada mensaje para situarse en el mensaje de la siguiente instrucción SQL. Todos los mensajes de una instrucción SQL individual, como un instrucción DBCC, se devuelven en un solo conjunto de resultados y no es necesario llamar a SQLMoreResults entre cada mensaje. En versiones anteriores del controlador ODBC de SQL Server, un error en tiempo de ejecución o un RAISERROR con una gravedad 11 o mayor en la primera instrucción de un procedimiento, almacenado o por lotes, producía que tanto SQLExecute como SQLExecDirect o SQLParamData devolviesen siempre SQL_ERROR. En la versión 3.6 del controlador ODBC de SQL Server, SQLExecute, SQLExecDirect o SQLParamData solamente devuelven SQL_ERROR si no se ejecutan otras instrucciones después de la primera instrucción. Si se ejecutan otras instrucciones después de la primera, incluso una simple instrucción RETURN sin valor de retorno, entonces SQLExecute o SQLExecDirect devuelven SQL_SUCCESS_WITH_INFO. Después de procesar los mensajes de SQL_SUCCESS_WITH_INFO con SQLGetDiagRec, llame a SQLMoreResults para situarse en el siguiente conjunto de resultados. Cuando las versiones anteriores del controlador encontraban un error en la primera instrucción de un procedimiento almacenado o por lotes, el controlador de instrucciones estaba disponible para que se pudiera utilizar con otra instrucción SQL después de que SQLExecute o SQLExecDirect devolviesen SQL_ERROR. Cuando el controlador 3.6 devuelve SQL_SUCCESS_WITH_INFO, la instrucción no queda liberada para procesar otra instrucción SQL hasta que SQLMoreResults devuelve SQL_NO_DATA o hasta que todos los conjuntos de resultados que siguen a RAISERROR se han cerrado. Si al mensaje de error no le sigue un conjunto de resultados, no se puede llamar a SQLCloseCursor; hay que llamar a SQLFreeStmt(SQL_CLOSE) o a SQLMoreResults para liberar al controlador de instrucciones, y procesar otra instrucción SQL: CREATE PROCEDURE TestPrc @Parm1 as IF (@Parm1 IS NULL) BEGIN RAISERROR ('Parm1 no puede ser NULO', 11, 1) RETURN END SELECT * FROM sysusers WHERE suid = @Parm1 GO Ejecute lo siguiente: SQLExecDirect(hstmt, "{ call TestPrc (NULL) }", SQL_NTS); Cuando se utiliza una versión anterior del controlador ODBC, o si la aplicación utiliza la API 2.X de ODBC, SQLExecDirect devuelve SQL_ERROR. Una vez que SQLGetDiagRec devuelve SQL_NO_DATA o SQLError devuelve SQL_NO_DATA_FOUND, el controlador de instrucciones queda libre para ejecutar otra instrucción SQL. Cuando se utiliza la versión 3.6 del controlador ODBC de SQL Server desde una aplicación escrita para la API 3.X de ODBC, SQLExecDirect devuelve SQL_SUCCESS_WITH_INFO. Después de que SQLGetDiagRec devuelve SQL_NO_DATA, no se puede utilizar el controlador de instrucciones para procesar otra instrucción SQL hasta que SQLMoreResults devuelve SQL_NO_DATA o se llama a SQLFreeStmt(SQL_CLOSE). En versiones anteriores del controlador ODBC de SQL Server, SQLExecute, SQLExecDirect o SQLParamData devuelven SQL_SUCCESS cuando una aplicación ejecuta una instrucción de búsqueda UPDATE o DELETE que no afecta a ninguna fila. En este caso, la versión 3.6 del controlador devuelve aún SQL_SUCCESS con las aplicaciones escritas con la API 2.x de ODBC, pero devuelve SQL_NO_DATA con las aplicaciones escritas con la API 3.X de ODBC. Tanto si la aplicación ODBC 2.X, que recibe SQL_SUCCESS, como si la aplicación ODBC 3.X, que recibe SQL_NO_DATA, llaman después a SQLRowCount, SQLRowCount devuelve un recuento de cero. ODBC 3.X define con mayor claridad el modo de devolver los resultados que ODBC 2.X. Versiones anteriores del controlador ODBC de SQL Server devolvían los valores de los parámetros de salida y los códigos de retorno cuando las funciones SQLFetch o SQLExtendedFetch de ODBC 2.X devolvían SQL_NO_DATA en el último conjunto de resultados devuelto por un procedimiento almacenado. El controlador de la versión 3.6 sigue actuando así cuando es llamado por aplicaciones de ODBC 2.X; no obstante, cuando es llamado por aplicaciones de ODBC 3.X, no devuelve parámetros de salida o códigos de retorno hasta que SQLMoreResults devuelve SQL_NO_DATA. ****************************************************************