CORRECÇÃO: Poderá receber uma mensagem de erro quando carregar o controlador de SQL Server 2000 para JDBC e controlador de SQL Server 2005 para JDBC na mesma aplicação, tenta ligar a uma base de dados do SQL Server 2005 e, em seguida, executar uma consulta

Traduções de Artigos Traduções de Artigos
Artigo: 915834 - Ver produtos para os quais este artigo se aplica.
Erro n.º: 2059 (PSSWebData)
Expandir tudo | Reduzir tudo

Nesta página

Sintomas

Considere o seguinte cenário. Carregar o controlador do Microsoft SQL Server 2000 para JDBC numa aplicação. Em seguida, carrega o JDBC controlador do Microsoft SQL Server 2005 na mesma aplicação. Neste cenário, quando tenta ligar a uma base de dados do SQL Server 2005 utilizando um URL de controlador do SQL Server 2005 JDBC, a ligação é estabelecida utilizando o controlador do Microsoft SQL Server 2000 para JDBC. Se executar uma consulta posteriormente, receberá a seguinte mensagem de erro:
[Microsoft][SQLServer 2000 Driver para JDBC][SQLServer]Os dados em forma de tabela receber transmissão em sequência chamada de procedimento remoto (TDS) sequência de protocolo (RPC, Remote Procedure Call) está incorrecta. Parâmetro 1 (""): tipo de dados 0x38 é desconhecido.
Se estabelecer uma ligação a uma base de dados do SQL Server 2000, poderá não receber nenhuma mensagem de erro e o facto de que o controlador errado está a ser utilizado poderá despercebido. Verificar este problema quando o controlador de SQL Server 2000 para JDBC é carregado antes do controlador de Microsoft SQL Server 2005 JDBC é carregado na aplicação.

Causa

Este problema ocorre porque ocorre de resolução de nomes com problemas no controlador do SQL Server 2000 JDBC. O controlador do SQL Server 2000 JDBC aceita URL de ligação do controlador de JDBC de SQL Server 2005. Controlador de SQL Server 2005 JDBC URLs de cadeia de ligação começam a seguinte cadeia:
JDBC:SQLServer: / / ConnectionString
Controlador de SQL Server 2000 para JDBC deve aceitar apenas URLs de cadeia de ligação que começam com a seguinte cadeia:
JDBC:Microsoft:SQLServer: / / ConnectionString
No entanto, o controlador de SQL Server 2000 para JDBC também aceita ligações com o seguinte formato:
JDBC:SQLServer: / / ConnectionString
A excepção ocorre porque o controlador de SQL Server 2000 para JDBC não foi concebido para ligar a uma base de dados do SQL Server 2005.

Resolução

Agora é disponibilizada pela Microsoft uma correcção suportada, mas destina-se apenas a corrigir o problema descrito neste artigo. Aplique-a apenas em sistemas que tenham este problema específico. Esta correcção poderá submetida a testes adicionais. Por conseguinte, se não estiver a ser gravemente afectado por este problema, recomendamos que aguarde pela próxima controlador de SQL Server 2000 para JDBC service pack que contenha esta correcção.

Para resolver este problema imediatamente, contacte o suporte técnico da Microsoft para obter a correcção. Para obter uma lista completa de números de telefone do suporte técnico da Microsoft e informações sobre os custos de suporte, visite o seguinte Web site da Microsoft:
http://support.microsoft.com/contactus/?ws=support
Nota Em casos especiais, os custos normalmente inerentes às chamadas de suporte poderão ser anulados, se um técnico de suporte da Microsoft determinar que uma actualização específica resolverá o problema. Os custos normais do suporte serão aplicados a problemas adicionais e questões de suporte que não se enquadrem na atualização específica em questão.

Informações do ficheiro

A versão inglesa desta correcção tem os atributos de ficheiro (ou atributos de ficheiro posteriores) listados na seguinte tabela. As datas e horas destes ficheiros são indicadas na hora universal coordenada (UTC). Quando visualiza as informações do ficheiro, é convertido para a hora local. Para determinar a diferença entre a UTC e a hora local, utilize o separador fuso horário no item Data e hora no painel de controlo.
Reduzir esta tabelaExpandir esta tabela
Nome de ficheiroTamanho do ficheiroDataTempo
Msbase.JAR289,71303-Fev-200623: 02
Mssqlserver.JAR67,48303-Fev-200623: 02
Msutil.JAR56,53703-Fev-200623: 02

Como contornar

Para contornar este problema, siga estes passos:
  1. Carregar o controlador para SQL Server 2005 para JDBC antes de carregar o controlador para SQL Server 2000 para JDBC. Para o fazer, utilize a classe DriverManager como no seguinte código exemplo
    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); // 2005 version
    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); // 2000 version
    
  2. Utilize um controlador para SQL Server 2005 para JDBC ligação URL para estabelecer uma ligação. Para o fazer, utilize código semelhante ao seguinte exemplo de código. con
    Connection con = DriverManager.getConnection("jdbc:sqlserver://<ServerName>;user=<UserName>;password=<Password>");
Para mais informações sobre como estabelecer ligação com origens de dados e como utilizar um URL de ligação, visite os seguintes Web sites da Microsoft Developer Network (MSDN):
Criar o URL de ligação
http://msdn2.microsoft.com/en-us/library/ms378428.aspx

Definir as propriedades de ligação
http://msdn2.microsoft.com/en-us/library/ms378988.aspx

Ponto Da Situação

A Microsoft confirmou que este erro ocorre nos produtos do Microsoft listados na secção "Aplica-se a".

Mais Informação

Passos para reproduzir o problema

Compilação e, em seguida, executar Java seguinte código de exemplo.
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 exemplo de código, substitua os seguintes marcadores de posição:
  • Substituir <Server> com o nome da instância do SQL Server.
  • Substituir <DatabaseName> com o nome da base de dados.
  • Substituir <UserId> com o ID de utilizador.
  • Substituir <PassWd> com a palavra-passe.

Referências

Para obter mais informações sobre JDBC, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
313100Como começar com o Microsoft JDBC
Os produtos de outros fabricantes explicado neste artigo são fabricados por empresas independentes da Microsoft. A Microsoft não oferece nenhuma garantia, expressa ou implícita, relativamente ao desempenho ou fiabilidade destes produtos.

Propriedades

Artigo: 915834 - Última revisão: 19 de julho de 2006 - Revisão: 1.0
A informação contida neste artigo aplica-se a:
  • Microsoft SQL Server 2000 Driver for JDBC
Palavras-chave: 
kbmt kbhotfixserver kbqfe kbfix KB915834 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 915834
Exclusão de Responsabilidade para Conteúdo sem Suporte na KB
Este artigo foi escrito sobre produtos para os quais a Microsoft já não fornece suporte. Por conseguinte, este artigo é oferecido "tal como está" e deixará de ser actualizado.

Submeter comentários

 

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