Sign in with Microsoft
New to Microsoft? Create an account.

Symptomer

Du koble til en Oracle-database ved hjelp av Microsoft OLE DB Provider for Oracle (MSDAORA), og avslutt deretter tilkoblingen på serversiden. Når du åpner en ny tilkobling til Oracle-databasen fra programmet, får du feilmelding om følgende unntak:

System.Data.OleDb.OleDbException: Uspesifisert feil
ORA-01012: ikke logget på

Årsak

Når du avslutter tilkobling til Oracle-databasen på serveren mens du bruker MSDAORA, returneres den brutte tilkoblingen til tilkoblingsgruppen. Tilkobling tilkoblingsutvalg koden fungerer riktig sammen med egenskapen ResetConnection for MSDAORA. Når denne egenskapen ikke støttes av leverandøren, feiltolker tilkoblingsutvalg koden at tilkoblingen er tilbakestilt, og at tilkoblingen er gyldig. Når Klientkoden åpner en ny tilkobling, hentes den brutte tilkoblingen som ble returnert til tilkoblingsgruppen. Du får derfor feilmeldingen som er nevnt i delen "Symptomer".

Løsning

Informasjon om hurtigreparasjon

En støttet hurtigreparasjon er nå tilgjengelig fra Microsoft. Det er imidlertid ment å løse problemet som er beskrevet i denne artikkelen. Bruk den bare på systemer som har dette bestemte problemet. Denne hurtigreparasjonen kan gjennomgå ytterligere testing. Hvis du ikke er alvorlig påvirket av dette problemet, anbefaler vi derfor at du venter på neste oppdateringspakke som inneholder denne hurtigreparasjonen.

Hvis du vil løse dette problemet umiddelbart, kontakter du Microsoft Kundestøtte for å få hurtigreparasjonen. For en fullstendig liste over telefonnumre for Microsofts kundestøttetjenester og informasjon om støttekostnader, kan du gå til følgende Microsoft-webområde:

http://support.microsoft.com/contactus/?ws=supportObs! I spesielle tilfeller kan avgifter som vanligvis påløper for oppringinger til kundestøtte kanselleres hvis en Microsoft-tekniker avgjør at en bestemt oppdatering løser problemet. Vanlige kundestøttekostnader gjelder for ytterligere kundestøttespørsmål og problemer som ikke dekkes av den gjeldende oppdateringen.

Filinformasjon

Den engelskspråklige versjonen av denne hurtigreparasjonen har filattributtene (eller senere filattributter) som er oppført i følgende tabell. Datoene og klokkeslettene for disse filene er oppført i Coordinated Universal Time (UTC). Når du viser filinformasjonen, konverteres den til lokal tid. Hvis du vil finne forskjellen mellom UTC og lokal tid, bruker du kategorien tidssone i dato og klokkeslett-verktøyet i Kontrollpanel.

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

Denne feilrettingsfilen er tilgjengelig som en del av en hurtigreparasjonspakke for kumulativ. Når du mottar denne hurtigreparasjonen fra Microsofts kundestøttetjenester, blir du artikkelnummeret som er oppført i hurtigreparasjonspakken for 839801 for MDAC 2.8 eller 836799 for MDAC 2.7 SP1. Hvis du vil ha mer informasjon, kan du se følgende artikkel i Microsoft Knowledge Base:



MDAC 2.8

Løs 839801 : hurtigreparasjoner som er tilgjengelige for MDAC 2.8

MDAC 2.7 SP1

Løs 836799 : hurtigreparasjoner som er tilgjengelige for MDAC 2.7 Service Pack 1

Status

Microsoft har bekreftet at dette er et problem i Microsoft-produktene som er oppført i delen "Gjelder for".

Hvis du vil ha mer informasjon

Slik gjenskaper du virkemåten

  1. Start Microsoft Visual Studio .NET.

  2. fil -menyen peker du på
    Ny, og klikk deretter prosjektet. Dialogboksen Nytt prosjekt vises.

  3. Under Prosjekttyper, klikker du Visual Basic-prosjekter, og klikk deretter Konsollprogramunder maler.

  4. I navn -boksen skriver du inn
    MyApp, og klikk deretter OK. Som standard opprettes filen Module1.vb.

    Hvis du bruker Microsoft Visual C# .NET, opprettes filen Class1.cs.

  5. Legg til følgende kode øverst:

    Microsoft Visual Basic .NET-kode

    Imports System
    Imports System.Data.OleDb

    Kode for Visual C# .NET

    using System.Data.OleDb;
  6. Legg til følgende kode i hoved-prosedyren:

    Visual Basic .NET-kode

    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()

    Kode for Visual C# .NET

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

    Obs! Endre tilkoblingsstrengen i henhold til ditt miljø.

  7. Klikk Bygg løsningLag -menyen.

  8. Klikk på feilsøking -menyen
    Start. Du ser at en kommando skal vises i konsollvinduet.

  9. I Oracle SQL * Plus, kjører du kommandoen som vises i konsollvinduet.

  10. Trykk ENTER. I konsollvinduet ser du unntak som er nevnt i delen "Symptomer".

Referanser

Hvis du vil ha mer informasjon om Microsoft OLE DB Provider for Oracle, kan du gå til følgende webområde for Microsoft Developer Network (MSDN):

http://msdn2.microsoft.com/en-us/library/ms810685.aspxHvis du vil ha mer informasjon, kan du klikke følgende artikkelnummer for å vise artikkelen i Microsoft Knowledge Base:

824684 beskrivelse av standardterminologien som brukes til å beskrive oppdateringer av Microsoft-programvare

Tredjepartsprodukter som denne artikkelen diskuterer, produseres av selskaper som er uavhengige av Microsoft. Microsoft gir ingen garantier, stilltiende eller på annen måte, når det gjelder ytelse eller pålitelighet av disse produktene.

Trenger du mer hjelp?

Utvid ferdighetene dine
Utforsk opplæring
Vær først ute med de nye funksjonene
Bli med i Microsoft Insiders

Var denne informasjonen nyttig?

Hvor fornøyd er du med språkkvaliteten?
Hva påvirket opplevelsen din?

Takk for tilbakemeldingen!

×