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

Traductions disponibles Traductions disponibles
Numéro d'article: 915834 - Voir les produits auxquels s'applique cet article
Bogue: # 2059 (PSSWebData)
Agrandir tout | Réduire tout

Sommaire

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 :
http://support.microsoft.com/contactus/?ws=support
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.
Réduire ce tableauAgrandir ce tableau
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 version
    Class.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 :
Création de l'URL de connexion
http://msdn2.microsoft.com/en-us/library/ms378428.aspx

Définir les propriétés de connexion
http://msdn2.microsoft.com/en-us/library/ms378988.aspx

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.

Propriétés

Numéro d'article: 915834 - Dernière mise à jour: mercredi 19 juillet 2006 - Version: 1.0
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft SQL Server 2000 Driver for JDBC
Mots-clés : 
kbmt kbhotfixserver kbqfe kbfix KB915834 KbMtfr
Traduction automatique
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
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.
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.

Envoyer des commentaires

 

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