Oprava: Můžete obdržet chybovou zprávu při načítání ovladače SQL Server 2000 pro JDBC a ovladač SQL Server 2005 pro JDBC ve stejné aplikaci, pokusíte připojit k databázi serveru SQL Server 2005 a potom spustit dotaz

Prohlášení o odmítnutí odpovědnosti pro už nepodporovaný obsah KB

Tento článek byl napsán pro produkty, ke kterým již Microsoft nadále nenabízí podporu. Článek je tedy poskytován „tak, jak je“ a nebude už nadále aktualizován.

Chyba č: 2059 (PSSWebData)
Chyba č: 53081 (Údržba obsahu)BUG #: 2059 (PSSWebData)

Příznaky

Zvažte následující scénář. Můžete načíst ovladač Microsoft SQL Server 2000 pro JDBC v aplikaci. Potom načíst Microsoft SQL Server 2005 JDBC ovladače ve stejné aplikaci. V tomto scénáři při pokusu o připojení k databázi serveru SQL Server 2005 pomocí SQL Server 2005 JDBC ovladač adresy URL připojení pomocí ovladače Microsoft SQL Server 2000 pro JDBC. Následně spustíte dotaz, zobrazí se následující chybová zpráva:
[Microsoft] [SQLServer 2000 ovladač pro JDBC] [SQL Server] Příchozí tabulková data datový proud (TDS) vzdálené volání procedury proudu protokol (RPC) je nesprávná. Parametr 1 (""): typ dat 0x38 neznámý.
Pokud vytvoříte připojení k databázi serveru SQL Server 2000, můžete obdržet chybová zpráva a skutečnost, že je používán nesprávný ovladač může být bez povšimnutí. Tomuto problému dochází při načtení ovladače SQL Server 2000 pro JDBC před načtením ovladače rozhraní JDBC Microsoft SQL Server 2005 v aplikaci.

Příčina

K tomuto problému dochází, protože vadný překladu dochází v ovladači SQL Server 2000 JDBC. Ovladač SQL Server 2000 JDBC přijímá připojení adres URL z SQL Server 2005 JDBC Driver. Připojovací řetězec pro SQL Server 2005 JDBC ovladač adresy URL začínají následujícím řetězcem:
jdbc:sqlserver://ConnectionString
Ovladač SQL Server 2000 pro JDBC měli přijmout pouze adresy URL řetězec připojení, které začínají následujícím řetězcem:
jdbc:microsoft:sqlserver://ConnectionString
Ovladač SQL Server 2000 pro JDBC však přijímá připojení, která mají následující formát:
jdbc:sqlserver://ConnectionString
Výjimka dochází, protože ovladač SQL Server 2000 pro JDBC není určen k připojení k databázi serveru SQL Server 2005.

Řešení

Podporovaná oprava hotfix je nyní k dispozici od společnosti Microsoft, ale je určena pouze k odstranění problému popsaného v tomto článku. Použijte ji pouze systémy, ve kterých dochází k tomuto konkrétnímu problému. Tato oprava hotfix může být dále testována. Proto pokud jste závažně tento problém, doporučujeme počkat další ovladač SQL Server 2000 pro JDBC service pack, která obsahuje tuto opravu hotfix.

Chcete-li tento problém vyřešit okamžitě, obraťte se na služby technické podpory pro tuto opravu hotfix. Úplný seznam telefonních čísel služeb technické podpory společnosti Microsoft a informace o cenách podpory naleznete na následujícím webu společnosti Microsoft:Poznámka: Ve zvláštních případech mohou být stornovány poplatky, které jsou třeba obvykle zaplatit za telefonní hovory, pokud pracovník služeb podpory společnosti Microsoft určí, že konkrétní aktualizace odstraní váš problém. Výdaje na technickou podporu použije dalších otázek a problémů, které nelze vyřešit konkrétní aktualizací.

Informace o souborech

Anglická verze této opravy hotfix má atributy (nebo pozdější atributy souborů) uvedené v následující tabulce. Kalendářní data a časy jednotlivých souborů jsou uvedeny v koordinovaném světovém čase (UTC). Při zobrazení informací o souboru je převeden na místní čas. Chcete-li najít rozdíl mezi časem UTC a místním časem, použijte kartu časové pásmo v položce datum a čas v okně Ovládací panely.
Název souboruVelikost souboruDatumČas
Msbase.jar289,71303-Feb-200623:02
Mssqlserver.jar67,48303-Feb-200623:02
Msutil.jar56,53703-Feb-200623:02

Jak potíže obejít

Chcete-li tento problém vyřešit, postupujte takto:
  1. Načtěte ovladač SQL Server 2005 pro JDBC před načtením ovladače SQL Server 2000 pro JDBC. To lze provést pomocí třídy DriverManager jako v následujícím příkladu kódu.
    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); // 2005 versionClass.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); // 2000 version

  2. Navázat připojení pomocí adresy URL připojení JDBC ovladače SQL Server 2005 Driver. Chcete-li to provést, použijte kód, který se podobá následující příklad kódu.
    Connection con = DriverManager.getConnection("jdbc:sqlserver://<ServerName>;user=<UserName>;password=<Password>");
Další informace o způsobu připojení ke zdroji dat a jak používat adresu URL připojení naleznete na následujících webech Microsoft Developer Network (MSDN):

Stav

Společnost Microsoft potvrzuje, že se jedná o problém v produktech této společnosti, které jsou uvedeny v části "Platí pro".

Další informace

Kroky pro reprodukci problému

Zkompilujte a spusťte následující ukázka kódu jazyka Java.
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());
}

}

}
Poznámka: Chcete-li použít tuto ukázku kódu, nahraďte následující zástupné symboly:
  • Nahraďte < Server > název instance serveru SQL Server.
  • < Název databáze > nahraďte název databáze.
  • Nahraďte < ID > vaše ID uživatele.
  • Nahraďte < heslo > heslo.

Odkazy

Další informace o rozhraní JDBC klepněte na následující číslo článku databáze Microsoft Knowledge Base:

Jak 313100 Začínáme s Microsoft JDBC

Produkty třetích stran, které tento článek popisuje jsou vyráběny společnostmi nezávislými na společnosti Microsoft. Společnost Microsoft neposkytuje žádnou záruku, implicitně předpokládanou ani jinou, ohledně výkonu nebo spolehlivosti těchto produktů.

Vlastnosti

ID článku: 915834 - Poslední kontrola: 16. 1. 2017 - Revize: 1

Váš názor