Microsoft KB Archive/834905

= FIX: You receive an &quot;ORA-01012&quot; error message when you connect to an Oracle database by using MSDAORA =

Article ID: 834905

Article Last Modified on 11/15/2007

-

APPLIES TO


 * Microsoft Data Access Components 2.8
 * Microsoft Data Access Components 2.7 Service Pack 1

-





SYMPTOMS
You connect to an Oracle database by using the Microsoft OLE DB Provider for Oracle (MSDAORA), and then you end the connection on the server side. When you open a new connection to the Oracle database from your application, you receive the following exception error message:

System.Data.OleDb.OleDbException: Unspecified error

ORA-01012: not logged on



CAUSE
When you end the connection to the Oracle database on the server side while using MSDAORA, the broken connection is returned to the connection pool. The connection pooling code incorrectly interacts with the ResetConnection property of MSDAORA. When this property is not supported by the provider, the pooling code incorrectly interprets that the connection is reset, and that the connection is a valid one. When the client code opens a new connection, the broken connection that was returned to the connection pool may be retrieved. Therefore, you receive the error message that is mentioned in the &quot;Symptoms&quot; section.



Hotfix information
A supported hotfix is now available from Microsoft. However, this hotfix is intended to correct only the problem that this article describes. Apply this hotfix only to systems that are experiencing this specific problem.

To resolve this problem, submit a request to Microsoft Online Customer Services to obtain the hotfix. To submit an online request to obtain the hotfix, visit the following Microsoft Web site:

http://go.microsoft.com/?linkid=6294451

Note If additional issues occur or any troubleshooting is required, you might have to create a separate service request. The usual support costs will apply to additional support questions and issues that do not qualify for this specific hotfix. To create a separate service request, visit the following Microsoft Web site:

http://support.microsoft.com/contactus/?ws=support

File information
The English version of this hotfix has the file attributes (or later file attributes) that are listed in the following table. The dates and times for these files are listed in Coordinated Universal Time (UTC). When you view the file information, it is converted to local time. To find the difference between UTC and local time, use the Time Zone tab in the Date and Time tool in Control Panel.

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



Notice
This hotfix is available as part of a cumulative hotfix package. When you receive this hotfix from Microsoft Product Support Services, the article number that is listed in the hotfix package will be 839801 for MDAC 2.8 or 836799 for MDAC 2.7 SP1. For more information, see the following article in the Microsoft Knowledge Base:

MDAC 2.8

839801 FIX: Hotfixes are available for MDAC 2.8

MDAC 2.7 SP1

836799 FIX: Hotfixes are available for MDAC 2.7 Service Pack 1



STATUS
Microsoft has confirmed that this is a problem in the Microsoft products that are listed in the &quot;Applies to&quot; section.



Steps to reproduce the behavior
 Start Microsoft Visual Studio .NET. On the File menu, point to New, and then click Project. The New Project dialog box appears. Under Project Types, click Visual Basic Projects, and then click Console Application under Templates. In the Name box, type MyApp, and then click OK. By default, the Module1.vb file is created.

If you are using Microsoft Visual C# .NET, the Class1.cs file is created.</li>  Add the following code at the top:

Microsoft Visual Basic .NET code Imports System Imports System.Data.OleDb Visual C# .NET code using System.Data.OleDb; </li>  Add the following code to the Main procedure:

Visual Basic .NET code Dim cn As OleDbConnection Dim cmd As OleDbCommand Dim r As OleDbDataReader Dim sid As String Dim orlcmd As String Dim connString As String = &quot;Provider=MSDAORA;DataSource= ;User ID= ;Password= ;&quot; 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 = &quot;SELECT SID, SERIAL# FROM V$SESSION WHERE SID = (SELECT SID FROM V$MYSTAT WHERE ROWNUM=1)&quot; cmd.Connection = cn   r = cmd.ExecuteReader sid = &quot;&quot; If (r.Read) Then sid = r.GetValue(0).ToString + &quot;,&quot; + r.GetValue(1).ToString End If   orlcmd = &quot;Alter System Kill Session '&quot; + sid + &quot;' Immediate;&quot; Console.WriteLine(&quot;Open the SQL Plus window, run the following command, and then press ENTER:&quot;) Console.WriteLine(orlcmd) Console.ReadLine r.Close cmd.CommandText = &quot;SELECT count(*) from TAB&quot; 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 = &quot;SELECT count(*) FROM TAB&quot; 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(&quot;Press ENTER to exit...&quot;) Console.ReadLine Visual C# .NET code OleDbConnection cn; OleDbCommand cmd; OleDbDataReader r; String sid; String orlcmd; String connString=&quot;Provider=MSDAORA;DataSource= ;User ID= ;Password= ;&quot;; try {   //Create a connection to the Oracle database by using MSDAORA. cn= new OleDbConnection; cn.ConnectionString=connString; cn.Open; cmd=new OleDbCommand; cmd.CommandText=&quot;SELECT SID, SERIAL# FROM V$SESSION WHERE SID = (SELECT SID FROM V$MYSTAT WHERE ROWNUM=1)&quot;; cmd.Connection=cn; r=cmd.ExecuteReader; sid=&quot;&quot;; if(r.Read) {      sid=r.GetValue(0).ToString+&quot;,&quot;+r.GetValue(1).ToString; }   orlcmd=&quot;Alter System Kill Session '&quot;+sid+&quot;' Immediate;&quot;; Console.WriteLine(&quot;Open the SQL Plus window, run the following command, and then press ENTER:&quot;); Console.WriteLine(orlcmd); Console.ReadLine; r.Close; cmd.CommandText=&quot;SELECT count(*) from TAB&quot;; 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=&quot;SELECT count(*) FROM TAB&quot;; 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(&quot;Press ENTER to exit...&quot;); Console.ReadLine; Note Modify the connection string according to your environment. </li> On the Build menu, click Build Solution.</li> On the Debug menu, click Start. You see that a command is displayed in the console window.</li> In Oracle SQL*Plus, run the command that is displayed in the console window.</li> Press ENTER. In the console window, you see the exception that is mentioned in the &quot;Symptoms&quot; section.</li></ol>

<div class="references_section">