Príznaky
Sa pripojiť k databáze Oracle pomocou poskytovateľa Microsoft OLE DB pre Oracle (MSDAORA) a potom ukončíte pripojenie na strane servera. Keď otvoríte nové pripojenie databázy Oracle aplikácie, zobrazí nasledujúce chybové hlásenie výnimky:
System.Data.OleDb.OleDbException: Neznáma chyba
ALEBO 01012: nie je prihlásený
Príčina
Keď ukončíte pripojenie databázy Oracle na strane servera pri používaní MSDAORA, prerušené pripojenia vráti fondu pripojení. Pripojenie zlučovania kód nesprávne spolupracuje s ResetConnection vlastnosť MSDAORA. Ak táto vlastnosť je poskytovateľ nepodporuje, kód zlučovania nesprávne interpretuje sa obnoviť pripojenie, a že pripojenie je platný. Po otvorení nového pripojenia klientovi prerušené pripojenia, ktoré vrátila fondu pripojení je možné načítať. Preto sa zobrazí chybové hlásenie, ktoré je spomenuté v časti "Príznaky".
Riešenie
Informácie o rýchlej oprave
Rýchla oprava je k dispozícii od spoločnosti Microsoft. Je však určená iba na vyriešenie problému, ktorý je popísaný v tomto článku. Použite ju iba v počítačoch s týmto konkrétnym problémom. Môže, že táto rýchla oprava bude ďalej testovaná. Ak vám nespôsobuje tento problém, odporúčame vám počkať na ďalší balík service pack, ktorá obsahuje túto rýchlu opravu.
Ak chcete tento problém vyriešiť okamžite, obráťte sa na služby technickej podpory spoločnosti Microsoft a požiadajte o rýchlu opravu. Úplný zoznam telefónnych čísiel služby podpory zákazníkov spoločnosti Microsoft a informácie o poplatkoch za poskytnutie technickej podpory nájdete na webovej lokalite spoločnosti Microsoft:
http://support.microsoft.com/contactus/?ws=supportPoznámka: V niektorých zvláštnych prípadoch sa môžu zrušiť poplatky za telefonickú podporu, ak pracovník služieb technickej podpory spoločnosti Microsoft usúdi, že daný problém sa vyrieši nainštalovaním určitej aktualizácie. Ďalšie otázky a žiadosti o technickú podporu, ktoré sa netýkajú tejto špecifickej aktualizácie, podliehajú bežným sadzbám za poskytovanie technickej podpory.
Informácie o súboroch
Anglická verzia tejto rýchlej opravy má atribúty súborov (alebo novšie atribúty) uvedené v nasledujúcej tabuľke. Dátumy a čas jednotlivých súborov sú uvedené vo formáte koordinovaného svetového času (UTC). Pri zobrazení informácií o súbore sa dátumy a čas prevedú na miestny čas. Ak chcete vyhľadať rozdiely medzi časom UTC a miestnym časom, použite kartu časové pásmo v nástroji dátum a čas v ovládacom paneli.
Microsoft Data Access Components (MDAC) 2.8
Date Time Version Size File name
---------------------------------------------------------
10-Mar-2004 04:22 2.80.1036.0 225,280 Msdaora.dll
10-Mar-2004 04:22 2000.85.1036.0 24,576 Odbcbcp.dll
10-Mar-2004 04:21 2.80.1036.0 442,368 Oledb32.dll
10-Mar-2004 04:21 2000.85.1036.0 401,408 Sqlsrv32.dll
MDAC 2.7 Service Pack 1
Date Time Version Size File name
---------------------------------------------------------
10-Mar-2004 02:19 2000.81.9046.0 61,440 Dbnetlib.dll
10-Mar-2004 02:20 2.71.9046.0 221,184 Msdaora.dll
10-Mar-2004 02:15 2.71.9046.0 126,976 Msdart.dll
10-Mar-2004 02:15 3.520.9046.0 204,800 Odbc32.dll
10-Mar-2004 02:20 2000.81.9046.0 24,576 Odbcbcp.dll
10-Mar-2004 02:20 3.520.9046.0 98,304 Odbccp32.dll
10-Mar-2004 02:16 2.71.9046.0 417,792 Oledb32.dll
10-Mar-2004 02:19 2000.81.9046.0 471,040 Sqloledb.dll
10-Mar-2004 02:19 2000.81.9046.0 385,024 Sqlsrv32.dll
Táto rýchla oprava je k dispozícii ako súčasť balíka Kumulatívna oprava. Keď prijmete túto rýchlu opravu z technickej podpory spoločnosti Microsoft, číslo článku, ktoré sa nachádza v balíku bude 839801 MDAC 2.8 alebo 836799 MDAC 2.7 SP1. Ďalšie informácie nájdete článok v databáze Microsoft Knowledge Base:
MDAC 2.8
839801 opraviť: rýchle opravy sú k dispozícii na MDAC 2.8
MDAC 2.7 SP1
836799 opraviť: rýchle opravy sú k dispozícii pre MDAC 2.7 Service Pack 1
Stav
Spoločnosť Microsoft potvrdila, že ide o problém v produktoch spoločnosti Microsoft, ktoré sú uvedené v časti Vzťahuje sa na.
Ďalšie informácie
Kroky na reprodukovanie správania
-
Spustenie nástroja Microsoft Visual Studio .NET.
-
V ponuke súbor ukážte na položku
Novéa kliknite na tlačidlo projekt. Nový projekt dialógové okno. -
Podľa Projekt typy, kliknite na tlačidlo Projektov programu Visual Basica kliknite na tlačidlo Aplikácia konzolypodľa šablóny.
-
Do poľa zadajte názov ,
Moja_aplikácia, a potom kliknite na tlačidlo OK. Predvolene sa vytvorí súbor Module1.vb.
Ak používate program Microsoft Visual C# .NET, Class1.cs súbor je vytvorený. -
Na začiatku, pridajte nasledujúci kód:
Kód Microsoft Visual Basic .NETImports System
Imports System.Data.OleDbVisual C# .NET kódu
using System.Data.OleDb;
-
Pridajte nasledovný kód do hlavnejprocedúry:
Kód jazyka Visual Basic .NETDim cn As OleDbConnection
Dim cmd As OleDbCommand
Dim r As OleDbDataReader
Dim sid As String
Dim orlcmd As String
Dim connString As String = "Provider=MSDAORA;DataSource=<data source>;User ID=<user name>;Password=<password>;"
Try
'Create a new connection to the Oracle database by using MSDAORA.
cn = New OleDbConnection
cn.ConnectionString = connString
cn.Open()
cmd = New OleDbCommand
cmd.CommandText = "SELECT SID , SERIAL# FROM V$SESSION WHERE SID = (SELECT SID FROM V$MYSTAT WHERE ROWNUM=1)"
cmd.Connection = cn
r = cmd.ExecuteReader()
sid = ""
If (r.Read()) Then
sid = r.GetValue(0).ToString() + "," + r.GetValue(1).ToString()
End If
orlcmd = "Alter System Kill Session '" + sid + "' Immediate;"
Console.WriteLine("Open the SQL Plus window, run the following command, and then press ENTER:")
Console.WriteLine(orlcmd)
Console.ReadLine()
r.Close()
cmd.CommandText = "SELECT count(*) from TAB"
Try
'Expecting this command to fail because connection has been killed
r = cmd.ExecuteReader()
Catch orlex As OleDbException
Console.WriteLine(orlex.Message)
cmd.Dispose()
'Close the bad connection.
cn.Close()
System.Threading.Thread.Sleep(1000)
cn.ConnectionString = connString
cn.Open()
cmd = New OleDbCommand
cmd.CommandText = "SELECT count(*) FROM TAB"
cmd.Connection = cn
'This command will fail, but it will work when a new connection is used.
r = cmd.ExecuteReader()
If (r.Read()) Then
Console.WriteLine(r.GetValue(0))
End If
End Try
Catch ex As OleDbException
Console.WriteLine(ex.ToString())
End Try
Console.WriteLine("Press ENTER to exit...")
Console.ReadLine()Visual C# .NET kódu
OleDbConnection cn;
OleDbCommand cmd;
OleDbDataReader r;
String sid;
String orlcmd;
String connString="Provider=MSDAORA;DataSource=<data source>;User ID=<user name>;Password=<password>;";
try
{
//Create a connection to the Oracle database by using MSDAORA.
cn= new OleDbConnection();
cn.ConnectionString=connString;
cn.Open();
cmd=new OleDbCommand();
cmd.CommandText="SELECT SID , SERIAL# FROM V$SESSION WHERE SID = (SELECT SID FROM V$MYSTAT WHERE ROWNUM=1)";
cmd.Connection=cn;
r=cmd.ExecuteReader();
sid="";
if(r.Read())
{
sid=r.GetValue(0).ToString()+","+r.GetValue(1).ToString();
}
orlcmd="Alter System Kill Session '"+sid+"' Immediate;";
Console.WriteLine("Open the SQL Plus window, run the following command, and then press ENTER:");
Console.WriteLine(orlcmd);
Console.ReadLine();
r.Close();
cmd.CommandText="SELECT count(*) from TAB";
try
{
//Expecting this to fail because the connection is killed.
r=cmd.ExecuteReader();
}
catch(OleDbException orlex)
{
Console.WriteLine(orlex.Message);
cmd.Dispose();
//Close the bad connection.
cn.Close();
System.Threading.Thread.Sleep(1000);
cn.ConnectionString=connString;
cn.Open();
cmd=new OleDbCommand();
cmd.CommandText="SELECT count(*) FROM TAB";
cmd.Connection=cn;
//This command will fail, but it will work when a new connection is used.
r=cmd.ExecuteReader();
if(r.Read())
{
Console.WriteLine(r.GetValue(0).ToString());
}
}
}
catch(OleDbException ex)
{
Console.WriteLine(ex.ToString());
}
Console.WriteLine("Press ENTER to exit...");
Console.ReadLine();Poznámka: Upraviť reťazec pripojenia podľa vášho prostredia.
-
Zostava ponuke Riešenie.
-
Ladenie v ponuke
Spustiť. Uvidíte, že príkaz sa zobrazí okno konzoly. -
V Oracle SQL * Plus, spustite príkaz, ktorý sa zobrazí v okne konzoly.
-
Stlačte kláves ENTER. V okne konzoly zobrazí výnimky, ktoré je spomenuté v časti "Príznaky".
Odkazy
Ďalšie informácie o Microsoft OLE DB Provider for Oracle, nájdete na nasledujúcej webovej lokalite Microsoft Developer Network (MSDN):
http://msdn2.microsoft.com/en-us/library/ms810685.aspxĎalšie informácie získate po kliknutí na nasledujúce číslo článku publikovaného v databáze Microsoft Knowledge Base:
824684 Popis štandardnej terminológie použitej na popis aktualizácií softvéru od spoločnosti Microsoft
Produkty tretích strán, ktorými sa zaoberá tento článok, vyrábajú spoločnosti, ktoré sú nezávislé od spoločnosti Microsoft. Spoločnosť Microsoft neposkytuje žiadne záruky týkajúce sa výkonu alebo spoľahlivosti týchto produktov.