REVISIÓN: Puede recibir un mensaje de error cuando carga el controlador de SQL Server 2000 para JDBC y el controlador de SQL Server 2005 para JDBC en la misma aplicación, intenta conectarse a una base de datos de SQL Server 2005 y, a continuación, ejecutar una consulta

Seleccione idioma Seleccione idioma
Id. de artículo: 915834 - Ver los productos a los que se aplica este artículo
Nº de error: 2059 (PSSWebData)
Expandir todo | Contraer todo

En esta página

Síntomas

Tenga en cuenta la situación siguiente. Cargar el controlador de Microsoft SQL Server 2000 para JDBC en una aplicación. A continuación, carga el controlador JDBC de Microsoft SQL Server 2005 en la misma aplicación. En este escenario, cuando intenta conectarse a una base de datos de SQL Server 2005 mediante una URL de controlador de SQL Server 2005 JDBC, se establece la conexión utilizando el controlador de Microsoft SQL Server 2000 para JDBC. Si posteriormente ejecuta una consulta, recibirá el siguiente mensaje de error:
[Microsoft][SQL Server 2000 Driver for JDBC][SQLServer]Los datos tabulares entrantes secuencia llamada de procedimiento remoto (TDS) secuencia de protocolo (RPC) es incorrecto. Parámetro 1 (""): tipo de datos 0x38 es desconocido.
Si establecer una conexión a una base de datos de SQL Server 2000, quizás no reciba ningún mensaje de error y el hecho de que se utiliza un controlador incorrecto puede ser desapercibido. Experimenta este problema cuando se carga el controlador de SQL Server 2000 para JDBC antes de cargar el controlador JDBC de Microsoft SQL Server 2005 en la aplicación.

Causa

Este problema se produce porque la resolución de nombres defectuoso se produce en el controlador JDBC de SQL Server 2000. El controlador JDBC de SQL Server 2000 acepta direcciones URL de conexión desde el controlador JDBC de SQL Server 2005. El controlador JDBC de SQL Server 2005 direcciones URL de cadena de conexión empiezan con la cadena siguiente:
JDBC:SQLServer: / / ConnectionString
El controlador de SQL Server 2000 para JDBC sólo debe aceptar direcciones URL de cadena de conexión que empiezan con la siguiente cadena:
JDBC:Microsoft:SQLServer: / / ConnectionString
Sin embargo, el controlador de SQL Server 2000 para JDBC también acepta las conexiones que tienen el formato siguiente:
JDBC:SQLServer: / / ConnectionString
La excepción se produce porque el controlador de SQL Server 2000 para JDBC no está diseñado para conectarse a una base de datos de SQL Server 2005.

Solución

Ahora hay disponible un hotfix para el que Microsoft proporciona soporte técnico, pero que sólo se diseñó para corregir el problema descrito en este artículo. Aplíquelo sólo a sistemas que experimenten este problema específico. Este hotfix puede ser sometido a comprobaciones adicionales. Por lo tanto, si no se ve muy afectado por este problema, recomendamos que espere para el siguiente controlador de SQL Server 2000 para JDBC service pack que contenga este hotfix.

Para resolver este problema inmediatamente, póngase en contacto con soporte técnico de Microsoft para obtener la revisión. Para obtener una lista completa de los números de teléfono de los servicios de soporte técnico de Microsoft e información acerca de los costos de soporte, visite el siguiente sitio Web:
http://support.microsoft.com/contactus/?ws=support
Nota en casos especiales, los costos derivados normalmente de las llamadas al soporte técnico pueden cancelarse si un profesional de soporte técnico de Microsoft determina que una actualización específica resolverá el problema. Los costos habituales de soporte se aplicarán a las preguntas de soporte técnico adicionales y problemas que no guarden relación con la actualización en cuestión.

Información de archivo

La versión en inglés de este hotfix tiene los atributos de archivo (o atributos de último archivo) mostrados en la siguiente tabla. Las fechas y las horas de estos archivos se muestran en hora universal coordinada (UTC). La información de los archivos se convertirá a la hora local cuando la vea. Para averiguar la diferencia entre hora UTC y la hora local, utilice la ficha zona horaria el elemento fecha y hora en el panel de control.
Contraer esta tablaAmpliar esta tabla
Nombre de archivoTamaño del archivoFechaTiempo
Msbase.jar289,71303-Feb-200623: 02
Mssqlserver.jar67,48303-Feb-200623: 02
Msutil.jar56,53703-Feb-200623: 02

Solución

Para evitar este problema, siga estos pasos:
  1. Cargar el controlador de SQL Server 2005 para JDBC antes de cargar el controlador de SQL Server 2000 para JDBC. Para ello, utilice la clase DriverManager como en el siguiente ejemplo de código.
    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); // 2005 version
    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); // 2000 version
    
  2. Utilice un controlador JDBC URL de conexión de SQL Server 2005 para establecer una conexión. Para ello, utilice código similar en el ejemplo de código siguiente se.
    Connection con = DriverManager.getConnection("jdbc:sqlserver://<ServerName>;user=<UserName>;password=<Password>");
Para obtener más información acerca de cómo conectar con orígenes de datos y cómo utilizar una dirección URL de conexión, visite los siguientes sitios Web de Microsoft Developer Network (MSDN):
Creación de la dirección URL de conexión
http://msdn2.microsoft.com/en-us/library/ms378428.aspx

Establecer las propiedades de conexión
http://msdn2.microsoft.com/en-us/library/ms378988.aspx

Estado

Microsoft ha confirmado que se trata de un error de los productos de Microsoft enumerados en la sección "La información de este artículo se refiere a:".

Más información

Pasos para reproducir el problema

Ejemplo de código de compilación y vuelva a ejecutar el siguiente Java.
import java.sql.*;
public class TestDriver {
  public static void main(String[] args) throws Exception
       	{

       	Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
       	Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

	Connection conn = DriverManager.getConnection("jdbc:microsoft:sqlserver://<Server>;DatabaseName=<DatabaseName>", 
"<UserId>","<Passwd>");
	DatabaseMetaData dbmd = conn.getMetaData();
	System.out.println("Driver = " + dbmd.getDriverName() + "_" + dbmd.getDriverVersion());

	conn = DriverManager.getConnection("jdbc:sqlserver://<Server>;DatabaseName=<DatabaseName>", 
"<UserId>","<Passwd>");
	dbmd = conn.getMetaData();
	System.out.println("Driver = " + dbmd.getDriverName() + "_" + dbmd.getDriverVersion());
	displayVersions(conn);
	}

	public static void displayVersions(Connection conn)
       	{
               Statement s3 = null;
               ResultSet rr = null;

               try
               {
                       s3 = conn.createStatement();
                       System.out.println("\nStart trying to retreive data\n");
                       rr = s3.executeQuery("select @@version");

                       boolean OK = rr.next();
                       if (OK)
                               System.out.println("The current version of Microsoft SQL Server is: " + rr.getString(1));
                       else
                               System.out.println("result set NO ROWS!");
               }
               catch (Exception ex)
               {
                       System.out.println("Caught error in displayAnyData:\n\t" + ex.getMessage());
               }

               try
               {
                       if (rr != null) rr.close();
                       if (s3 != null) s3.close();
                       System.out.println("End trying to retreive data\n");
               }
               catch (Exception ee)
               {
                       System.out.println("Error closing rr or s3 in displayData: " + ee.getMessage());
               }

	}

	}
Nota para utilizar este ejemplo de código, reemplace los siguientes marcadores de posición:
  • Reemplazar <Server> con el nombre de la instancia de SQL Server.
  • Reemplazar <DatabaseName> con el nombre de la base de datos.
  • Reemplazar <UserId> con su identificador de usuario.
  • Reemplazar <PassWd> con la contraseña.

Referencias

Para obtener más información acerca de JDBC, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
313100Cómo empezar con Microsoft JDBC
Los productos de terceros que se analizan en este artículo están fabricados por compañías independientes de Microsoft. Microsoft no otorga ninguna garantía, implícita o de otro tipo, respecto al rendimiento o confiabilidad de estos productos.

Propiedades

Id. de artículo: 915834 - Última revisión: miércoles, 19 de julio de 2006 - Versión: 1.0
La información de este artículo se refiere a:
  • Microsoft SQL Server 2000 Driver for JDBC
Palabras clave: 
kbmt kbhotfixserver kbqfe kbfix KB915834 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 915834
Renuncia a responsabilidad de los contenidos de la KB sobre productos a los que ya no se ofrece asistencia alguna
El presente artículo se escribió para productos para los que Microsoft ya no ofrece soporte técnico. Por tanto, el presente artículo se ofrece "tal cual" y no será actualizado.

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com