Prihláste sa s kontom Microsoft
Prihláste sa alebo si vytvorte konto.
Dobrý deň,
Vyberte iné konto.
Máte viacero kont
Vyberte konto, s ktorým sa chcete prihlásiť.

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

  1. Spustenie nástroja Microsoft Visual Studio .NET.

  2. V ponuke súbor ukážte na položku
    Novéa kliknite na tlačidlo projekt. Nový projekt dialógové okno.

  3. Podľa Projekt typy, kliknite na tlačidlo Projektov programu Visual Basica kliknite na tlačidlo Aplikácia konzolypodľa šablóny.

  4. 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ý.

  5. Na začiatku, pridajte nasledujúci kód:

    Kód Microsoft Visual Basic .NET

    Imports System
    Imports System.Data.OleDb

    Visual C# .NET kódu

    using System.Data.OleDb;
  6. Pridajte nasledovný kód do hlavnejprocedúry:

    Kód jazyka Visual Basic .NET

    Dim 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.

  7. Zostava ponuke Riešenie.

  8. Ladenie v ponuke
    Spustiť. Uvidíte, že príkaz sa zobrazí okno konzoly.

  9. V Oracle SQL * Plus, spustite príkaz, ktorý sa zobrazí v okne konzoly.

  10. 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.

Potrebujete ďalšiu pomoc?

Chcete ďalšie možnosti?

Môžete preskúmať výhody predplatného, prehľadávať školiace kurzy, naučiť sa zabezpečiť svoje zariadenie a ešte oveľa viac.

Komunity pomôžu s kladením otázok a odpovedaním na ne, s poskytovaním pripomienok a so získavaním informácií od odborníkov s bohatými znalosťami.

Boli tieto informácie užitočné?

Aká je podľa vás jazyková kvalita textu?
Čo sa vám páčilo, prípadne čo nie?
Stlačením tlačidla Odoslať sa vaše pripomienky použijú na zlepšenie produktov a služieb spoločnosti Microsoft. Váš správca IT bude môcť tieto údaje zhromažďovať. Vyhlásenie o ochrane osobných údajov.

Ďakujeme za vaše pripomienky!

×