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 feilORA-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.8MDAC 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 innMyApp, 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 SystemImports 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 OleDbConnectionDim cmd As OleDbCommandDim r As OleDbDataReaderDim sid As StringDim orlcmd As StringDim 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 TryCatch ex As OleDbException   Console.WriteLine(ex.ToString())End TryConsole.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 -menyenStart. 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-programvareTredjepartsprodukter 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?

Vil du ha flere alternativer?

Utforsk abonnementsfordeler, bla gjennom opplæringskurs, finn ut hvordan du sikrer enheten og mer.