CORRECÇÃO: Você pode receber uma mensagem de erro quando você carregar o driver do SQL Server 2000 para JDBC e o driver do SQL Server 2005 para JDBC no mesmo aplicativo, você tenta se conectar a um banco de dados do SQL Server 2005 e, em seguida, executar uma consulta

Traduções deste artigo Traduções deste artigo
ID do artigo: 915834 - Exibir os produtos aos quais esse artigo se aplica.
Bug #: 2059 (PSSWebData)
Expandir tudo | Recolher tudo

Neste artigo

Sintomas

Considere o seguinte cenário. Você pode carregar o driver do Microsoft SQL Server 2000 para JDBC em um aplicativo. Em seguida, carrega o driver de JDBC de 2005 do SQL Server no mesmo aplicativo. Nesse cenário, quando você tenta se conectar a um banco de dados do SQL Server 2005 usando uma URL SQL Server 2005 JDBC driver, a conexão é estabelecida usando o driver do Microsoft SQL Server 2000 para JDBC. Se você executar uma consulta posteriormente, você receber a seguinte mensagem de erro:
[Microsoft][SQLServer driver do 2000 para JDBC][SQLServer]Dados tabulares de entrada fluxo (TDS) remote procedure call (RPC) protocolo fluxo está incorreto. Parâmetro 1 (""): tipo de dados 0x38 é desconhecido.
Se você estabelecer uma conexão com um banco de dados do SQL Server 2000, você não pode receber qualquer mensagem de erro e o fato de que o driver errado está sendo usado pode ser percebido. Você enfrentar esse problema quando o driver do SQL Server 2000 para JDBC é carregado antes que o driver JDBC do Microsoft SQL Server 2005 é carregado no aplicativo.

Causa

Esse problema ocorre porque a resolução de nome com falha ocorre no driver JDBC do SQL Server 2000. O driver JDBC do SQL Server 2000 aceita URLs de conexão do driver JDBC do SQL Server 2005. O driver JDBC do SQL Server 2005 iniciam URLs de cadeia de caracteres de conexão com a seqüência de caracteres a seguir:
JDBC:SQLServer: / / ConnectionString
O driver do SQL Server 2000 para JDBC devem aceitar apenas URLs de seqüência de caracteres de conexão que começam com a seguinte seqüência de caracteres:
JDBC:Microsoft:SQLServer: / / ConnectionString
No entanto, o driver do SQL Server 2000 para JDBC também aceita conexões que possuem o seguinte formato:
JDBC:SQLServer: / / ConnectionString
A exceção ocorre porque o driver do SQL Server 2000 para JDBC não foi projetado para se conectar a um banco de dados SQL Server 2005.

Resolução

Um hotfix suportado agora está disponível da Microsoft, mas destina-se somente a corrigir o problema descrito neste artigo. Aplique-o somente nos sistemas que apresentarem esse problema específico. Esta correcção poderá submetida a testes adicionais. Portanto, se você não tiver sido gravemente afetado por esse problema, recomendamos que você aguarde o próximo driver SQL Server 2000 para JDBC service pack que contém esse hotfix.

Para resolver esse problema imediatamente, contate o Atendimento Microsoft para obter o hotfix. Para obter uma lista completa de telefones do Atendimento Microsoft e informações sobre os custos de suporte da, visite o seguinte site:
http://support.microsoft.com/contactus/?ws=support
Observação Em alguns casos, as taxas cobradas pelas ligações para chamadas de suporte podem ser canceladas se um profissional de suporte da Microsoft determinar que uma atualização específica resolverá o problema. Os custos normais de suporte serão aplicados a questões e problemas que não se qualificam à atualização específica em questão de suporte adicionais.

Informações sobre o arquivo

A versão em inglês deste hotfix tem atributos de arquivo (ou atributos de arquivo posteriores) listados na tabela a seguir. As datas e horas desses arquivos estão listadas no horário de universal coordenado (UTC). Quando você exibe as informações do arquivo, ele é convertido para a hora local. Para encontrar a diferença entre o UTC e a hora local, use a guia fuso horário no item Data e hora no painel de controle.
Recolher esta tabelaExpandir esta tabela
Nome de arquivoTamanho do arquivoDataTempo
Msbase.jar289,71303 De fevereiro de 200623: 02
Mssqlserver.jar67,48303 De fevereiro de 200623: 02
Msutil.jar56,53703 De fevereiro de 200623: 02

Como Contornar

Para contornar esse problema, execute estas etapas:
  1. Carregar o driver do SQL Server 2005 para JDBC antes de carregar o driver do SQL Server 2000 para JDBC. Para fazer isso, use a classe DriverManager como no seguinte exemplo de código.
    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); // 2005 version
    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); // 2000 version
    
  2. Use um driver SQL Server 2005 para URL de conexão JDBC para estabelecer uma conexão. Para fazer isso, use o código que se pareça com o exemplo de código a seguir. con
    Connection con = DriverManager.getConnection("jdbc:sqlserver://<ServerName>;user=<UserName>;password=<Password>");
Para obter mais informações sobre como conectar-se com fontes de dados e como usar um URL de conexão, visite os seguintes sites da Microsoft Developer Network (MSDN):
Criando a URL de conexão
http://msdn2.microsoft.com/en-us/library/ms378428.aspx

Definindo as propriedades de conexão
http://msdn2.microsoft.com/en-us/library/ms378988.aspx

Situação

A Microsoft confirmou que esse é um problema nos produtos da Microsoft listados na seção "Aplica-se a".

Mais Informações

Etapas 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());
               }

	}

	}
Observação para usar este exemplo de código, substitua os seguintes espaços reservados:
  • Substituir <Server> com o nome da instância do SQL Server.
  • Substituir <DatabaseName> com o nome do banco de dados.
  • Substituir <UserId> com sua identificação de usuário.
  • Substituir <PassWd> com sua senha.

Referências

Para obter mais informações sobre JDBC, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
313100Como introdução ao Microsoft JDBC
Os produtos de terceiros mencionados neste artigo são fabricados por empresas que são independentes da Microsoft. A Microsoft não oferece garantia, implícita ou não, em relação ao desempenho ou à confiabilidade desses produtos.

Propriedades

ID do artigo: 915834 - Última revisão: quarta-feira, 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 traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 915834
Aviso de Isenção de Responsabilidade sobre Conteúdo do KB Aposentado
Este artigo trata de produtos para os quais a Microsoft não mais oferece suporte. Por esta razão, este artigo é oferecido "como está" e não será mais atualizado.

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