CORRECTIF : vous pouvez recevoir un message d'erreur lorsque vous chargez le pilote SQL Server 2000 pour JDBC et le pilote SQL Server 2005 pour JDBC dans la même application, vous essayez de vous connecter à une base de données SQL Server 2005, et que puis vous exécutez une requête

IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d’articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d’avoir accès, dans votre propre langue, à l’ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s’exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s’efforce aussi continuellement de faire évoluer son système de traduction automatique.

La version anglaise de cet article est la suivante: 915834
Exclusion de responsabilité concernant les contenus obsolètes dans la Base de connaissances
Cet article concerne des produits pour lesquels Microsoft n'offre plus de support. Il est par conséquent fourni « en l'état » et ne sera plus mis à jour.
Bogue: # 2059 (PSSWebData)
Symptômes
Envisagez le scénario suivant. Vous charger le pilote Microsoft SQL Server 2000 pour JDBC dans une application. Ensuite, vous charger le pilote JDBC Microsoft SQL Server 2005 dans la même application. Dans ce scénario, lorsque vous essayez de vous connecter à une base de données SQL Server 2005 en utilisant une URL de pilote SQL Server 2005 JDBC, la connexion est établie en utilisant le pilote Microsoft SQL Server 2000 pour JDBC. Si vous exécutez ensuite une requête, vous recevez le message d'erreur suivantes :
[Microsoft][SQL Server 2000 pilote pour JDBC][SQL Server]Les données tabulaires entrantes flux appel de procédure distante (TDS) flux du protocole (RPC) est incorrect. Paramètre 1 (" "): type de données 0x38 est inconnu.
Si vous établissez une connexion à une base de données SQL Server 2000, n'importe quel message d'erreur ne peut pas s'afficher et le fait que le pilote incorrect est utilisé peut être pendant. Vous rencontrez ce problème lorsque le pilote SQL Server 2000 pour JDBC est chargé avant le pilote JDBC Microsoft SQL Server 2005 est chargé dans l'application.
Cause
Ce problème se produit car la résolution de noms défectueux se produit dans le pilote JDBC de SQL Server 2000. Pilote JDBC de SQL Server 2000 accepte les URL de connexion dans le pilote JDBC de SQL Server 2005. Le pilote JDBC de SQL Server 2005 connexion chaîne URL commencent par la chaîne suivante :
JDBC:SQLServer: / / ConnectionString
Le pilote SQL Server 2000 pour JDBC doivent accepter uniquement les URL de chaîne de connexion qui commencent par la chaîne suivante :
JDBC:Microsoft:SQLServer: / / ConnectionString
Toutefois, le pilote SQL Server 2000 pour JDBC accepte également connexions ayant le format suivant :
JDBC:SQLServer: / / ConnectionString
L'exception se produit car le pilote SQL Server 2000 pour JDBC n'est pas conçu pour vous connecter à une base de données SQL Server 2005.
Résolution
Un correctif est désormais disponible auprès de Microsoft, mais il ne vise qu'à corriger le problème décrit dans cet article. Uniquement l'appliquer à des systèmes rencontrant ce problème spécifique. Ce correctif peut subir des tests supplémentaires. Par conséquent, si vous n'êtes pas gravement touché par ce problème, nous vous recommandons d'attendre le pilote 2000 suivant SQL Server pour JDBC service pack qui comprendra ce correctif.

Pour résoudre ce problème immédiatement, contactez services de support technique Microsoft afin d'obtenir le correctif logiciel. Pour une liste complète des numéros de téléphone des services de support technique Microsoft et des informations sur les frais de support technique, reportez-vous au site de Web Microsoft suivant : note Dans certains cas, les frais aucuns de support peuvent être facturés si un technicien du support technique Microsoft détermine qu'une mise à jour spécifique peut résoudre votre problème. Les coûts habituels du support technique s'appliqueront aux autres questions et problèmes non traités par la mise à jour en question.

Informations de fichier

La version anglaise de ce correctif dispose les attributs de fichier (ou attributs de fichier version ultérieure) répertoriés dans le tableau suivant. Les dates et heures de ces fichiers sont exprimées en temps universel coordonné (UTC). Lorsque vous affichez les informations de fichier, il est convertie en heure locale. Pour connaître le décalage entre l'heure UTC et l'heure locale, utilisez l'onglet Fuseau horaire dans l'élément Date et heure du Panneau de configuration.
Nom de fichierTaille du fichierDateHeure
Msbase.jar289,71303-Fév-200623:02
Mssqlserver.jar67,48303-Fév-200623:02
Msutil.jar56,53703-Fév-200623:02
Contournement
Pour contourner ce problème, procédez comme suit :
  1. Charger le pilote SQL Server 2005 pour JDBC avant de charger le pilote SQL Server 2000 pour JDBC. Pour ce faire, utilisez la classe DriverManager comme dans l'exemple de code suivant.
    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); // 2005 versionClass.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); // 2000 version
  2. Utiliser un pilote SQL Server 2005 pour les URL de connexion JDBC pour établir une connexion. Pour ce faire, utilisez le code qui ressemble à l'exemple de code suivant. canular
    Connection con = DriverManager.getConnection("jdbc:sqlserver://<ServerName>;user=<UserName>;password=<Password>");
Pour plus d'informations sur comment se connecter aux sources de données et comment utiliser une URL de connexion, reportez-vous aux Web MSDN (Microsoft Developer Network) sites adresses suivantes :
Statut
Microsoft a confirmé qu'il s'agit un bogue dans les produits Microsoft répertoriés dans la section « S'applique à ».
Plus d'informations

Procédure pour reproduire le problème

Compilation et puis exécutez le Java suivant code exemple.
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());               }	}	}
Remarque pour utiliser cet exemple de code, remplacez les espaces réservés suivants :
  • Remplacer <Server>avec le nom de l'instance de SQL Server.
  • Remplacer <DatabaseName>avec le nom de la base de données.
  • Remplacer <UserId>avec votre ID utilisateur.
  • Remplacer <PassWd>avec votre mot de passe.
Références
Pour plus d'informations JDBC, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
313100 Comment démarrer avec Microsoft JDBC
Les produits tiers Cet article décrit sont mentionnés par des sociétés indépendantes de Microsoft. Microsoft garantit pas, ou implicite, concernant les performances ou la fiabilité de ces produits.

Avertissement : Cet article a été traduit automatiquement.

Propriétés

ID d'article : 915834 - Dernière mise à jour : 07/19/2006 21:11:15 - Révision : 1.0

Microsoft SQL Server 2000 Driver for JDBC

  • kbmt kbhotfixserver kbqfe kbfix KB915834 KbMtfr
Commentaires