FIX: Possibile che venga visualizzato un messaggio di errore quando si carica il driver di SQL Server 2000 per JDBC e driver SQL Server 2005 per JDBC nella stessa applicazione, si tenta di connettersi a un database di SQL Server 2005 e quindi si esegue una query

Traduzione articoli Traduzione articoli
Identificativo articolo: 915834 - Visualizza i prodotti a cui si riferisce l?articolo.
Bug #: 2059 (PSSWebData)
Espandi tutto | Chiudi tutto

In questa pagina

Sintomi

Si consideri lo scenario seguente. È possibile caricare il driver di Microsoft SQL Server 2000 per JDBC in un'applicazione. Quindi, è necessario caricare il driver JDBC di Microsoft SQL Server 2005 nella stessa applicazione. In questo scenario, quando si tenta di connettersi a un database di SQL Server 2005 utilizzando un URL di driver JDBC di SQL Server 2005, la connessione viene stabilita con Microsoft SQL Server 2000 driver per JDBC. Se successivamente si esegue una query, è visualizzato il seguente messaggio di errore:
[Microsoft][SQL Server 2000 driver per JDBC][SQL Server]I dati tabulari in arrivo flusso (TDS, Tabular Data Stream) remote procedure call (RPC) flusso del protocollo non è corretto. Parametro 1 (""): tipo di dati 0x38 è sconosciuto.
Se si stabilisce una connessione a un database di SQL Server 2000, potresti non ricevere alcun messaggio di errore e il fatto che viene utilizzato il driver errato potrebbe essere inosservato. Questo problema si verifica quando SQL Server 2000 driver per JDBC viene caricato prima di caricare il driver JDBC di Microsoft SQL Server 2005 nell'applicazione.

Cause

Questo problema si verifica poiché la risoluzione dei nomi difettoso viene eseguita nel driver JDBC di SQL Server 2000. Il driver JDBC di SQL Server 2000 accetta URL di connessione dal driver JDBC di SQL Server 2005. Il driver JDBC di SQL Server 2005 gli URL di stringa di connessione iniziano con la seguente stringa:
JDBC:SQLServer: / / ConnectionString
SQL Server 2000 driver per JDBC deve accettare solo gli URL di stringa di connessione che iniziano con la seguente stringa:
JDBC:Microsoft:SQLServer: / / ConnectionString
Tuttavia, SQL Server 2000 driver per JDBC accetta anche le connessioni che avere il seguente formato:
JDBC:SQLServer: / / ConnectionString
L'eccezione si verifica perché SQL Server 2000 driver per JDBC non è progettato per connettersi a un database SQL Server 2005.

Risoluzione

Un hotfix supportato è disponibile da Microsoft, tuttavia è destinato esclusivamente per risolvere il problema descritto in questo articolo. Utilizzarla solo nei sistemi in cui si verifica questo problema specifico. Questo aggiornamento rapido (hotfix) potrebbe essere eseguiti ulteriori test. Pertanto, se non si è notevolmente interessati da questo problema, si consiglia di attendere per il driver successiva di SQL Server 2000 per JDBC service pack contenente questo aggiornamento rapido (hotfix).

Per risolvere immediatamente questo problema, contattare il servizio supporto tecnico clienti Microsoft per ottenere l'hotfix. Per un elenco completo di numeri di telefono del servizio supporto tecnico clienti Microsoft e per informazioni sui costi dell'assistenza, visitare il seguente sito Web Microsoft:
http://support.microsoft.com/contactus/?ws=support
Nota in casi particolari, le spese normalmente addebitate per le chiamate al Servizio Supporto Tecnico Clienti Microsoft potrebbero essere annullate qualora un addetto del Supporto Tecnico Microsoft dovesse determinare che uno specifico aggiornamento risolverà il problema. I normali costi del Servizio Supporto Tecnico Clienti verranno applicati per eventuali ulteriori domande e problemi che non dovessero rientrare nello specifico aggiornamento in questione.

Informazioni sui file

La versione di lingua inglese di questo aggiornamento rapido (hotfix) presenta gli attributi di file (o attributi successivi) elencati nella tabella riportata di seguito. Le date e le ore per questi file sono indicati in UTC (Coordinated Universal Time). Quando si visualizzano le informazioni sul file, viene convertito in ora locale. Per calcolare la differenza tra ora UTC e l'ora locale, utilizzare la scheda fuso orario dello data e ora nel Pannello di controllo.
Riduci questa tabellaEspandi questa tabella
Nome del fileDimensione del fileDataOra
Msbase.jar289,71303-Febbraio 200623: 02
Mssqlserver.jar67,48303-Febbraio 200623: 02
Msutil.jar56,53703-Febbraio 200623: 02

Workaround

Per aggirare questo problema, attenersi alla seguente procedura:
  1. Prima di caricare il driver di SQL Server 2000 per JDBC, caricare il driver di SQL Server 2005 per JDBC. Per effettuare questa operazione, utilizzare la classe DriverManager come nel seguente codice di esempio.
    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); // 2005 version
    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); // 2000 version
    
  2. Utilizzare SQL Server 2005 driver per JDBC URL di connessione per stabilire una connessione. A tale scopo, utilizzare codice simile a nell'esempio di codice riportato di seguito.
    Connection con = DriverManager.getConnection("jdbc:sqlserver://<ServerName>;user=<UserName>;password=<Password>");
Per ulteriori informazioni su come connettersi a origini dati e come utilizzare un URL di connessione, visitare i seguenti siti Web MSDN (informazioni in lingua inglese):
Creazione di URL di connessione
http://msdn2.microsoft.com/en-us/library/ms378428.aspx

Impostazione delle proprietà di connessione
http://msdn2.microsoft.com/en-us/library/ms378988.aspx

Status

Microsoft ha confermato che questo un bug nei prodotti sono elencati nella sezione "Si applica a".

Informazioni

Procedura per riprodurre il problema

Compilazione e quindi eseguire il Java seguente codice di esempio.
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 per utilizzare questo esempio di codice, sostituire i segnaposto seguenti:
  • Sostituire <Server> con il nome dell'istanza di SQL Server.
  • Sostituire <DatabaseName> con il nome del database.
  • Sostituire <UserId> con l'ID utente.
  • Sostituire <PassWd> con la password.

Riferimenti

Per ulteriori informazioni su JDBC, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito riportato:
313100Per iniziare con JDBC di Microsoft
I prodotti di terze parti che in questo articolo viene descritto sono forniti da produttori indipendenti. Microsoft non rilascia alcuna garanzia, implicita o di altra natura, relativa alle prestazioni o all'affidabilità di questi prodotti.

Proprietà

Identificativo articolo: 915834 - Ultima modifica: mercoledì 19 luglio 2006 - Revisione: 1.0
Le informazioni in questo articolo si applicano a:
  • Microsoft SQL Server 2000 Driver for JDBC
Chiavi: 
kbmt kbhotfixserver kbqfe kbfix KB915834 KbMtit
Traduzione automatica articoli
Il presente articolo è stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non è sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, più o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non è la sua. Microsoft non è responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 915834
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.
Dichiarazione di non responsabilità per articoli della Microsoft Knowledge Base su prodotti non più supportati
Questo articolo è stato scritto sui prodotti per cui Microsoft non offre più supporto. L?articolo, quindi, viene offerto ?così come è? e non verrà più aggiornato.

Invia suggerimenti

 

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