使用 Microsoft 登入
登入或建立帳戶。
您好:
選取其他帳戶。
您有多個帳戶
選擇您要用來登入的帳戶。

狀況

您使用 Microsoft OLE DB 提供者的 Oracle (MSDAORA),連線到 Oracle 資料庫,然後在您結束在伺服器端連線。當您開啟新的連線到 Oracle 資料庫從應用程式時,您會收到下列的例外狀況錯誤訊息:

System.Data.OleDb.OleDbException: 未指定的錯誤
這個 01012: 未登入

原因

當您結束使用 MSDAORA 時在伺服器端的 Oracle 資料庫的連線時,就會中斷的連接傳回到連接集區中。此外,連線的共用程式碼不正確會與 MSDAORA 的ResetConnection屬性互動。當提供者不支援這個屬性,則共用的程式碼不正確解譯,連線重設時,以及連線有效。當用戶端程式碼開啟新的連線時,便可以擷取和傳回連接集區的連線中斷。因此,您會收到 < 徵狀=""> 一節所述的錯誤訊息。

解決方案

Hotfix 資訊

已經可以從 Microsoft 取得支援的 hotfix。不過,其旨在修正本文所述的問題。它只適用於發生此特定問題的系統上。此 hotfix 可能會接受其他測試。因此,如果這個問題不會嚴重影響,我們建議您等候下一個包含此 hotfix 的 service pack。

若要立即解決這個問題,請連絡 Microsoft 客戶支援服務 」 取得 hotfix。如需 Microsoft 客戶支援服務電話號碼以及支援費用的相關資訊的完整清單,請造訪下列 Microsoft 網站︰

http://support.microsoft.com/contactus/?ws=support注意 在特殊的情況下,如果 Microsoft 支援專業人員認為某特定更新程式可以解決您的問題時,可能就不會收取一般因支援電話所產生的費用。收取支援費用會套用,如果有其他支援問題是,不能限定的特定更新程式。

檔案資訊

此 hotfix 的英文版具有下列表格中所列檔案屬性 (或較新的檔案屬性)。這些檔案的日期和時間會以國際標準時間 (UTC) 格式列出。當您檢視檔案資訊時,會將它轉換為本地時間。若要查看 UTC 與當地時間的時差,請在 [控制台] 中的 [日期和時間] 工具中使用 [時區] 索引標籤。

Microsoft 資料存取元件 (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

此 hotfix 是可用的累積的 hotfix 套件的一部分。當您收到此 hotfix,從 Microsoft 產品支援服務時,hotfix 套件中所列的文件編號會 MDAC 2.8 的 839801 或 836799 MDAC 2.7 sp1。如需詳細資訊,請參閱下列的文件 「 Microsoft 知識庫 」 中的文:



MDAC 2.8

839801修正: Hotfix 可供 MDAC 2.8

MDAC 2.7 SP1

836799修正: Hotfix 可供 MDAC 2.7 Service Pack 1

狀態

Microsoft 已確認這是<套用>一節所列出的 Microsoft 產品的問題。

更多的資訊

重現問題的步驟

  1. 啟動 Microsoft Visual Studio .NET。

  2. 在 [檔案] 功能表上指向 [
    [新增],然後按一下 [專案新的專案] 對話方塊隨即出現。

  3. 在 [專案類型,請按一下 [ Visual Basic 專案中,,,然後在 [範本] 之下按一下 [主控台應用程式

  4. 在 [名稱] 方塊中,輸入
    MyApp,然後按一下[確定]。根據預設,會建立 Module1.vb 檔案。

    如果您使用 Microsoft Visual C#.NET 時,會建立 Class1.cs 檔。

  5. 在頂端加入下列程式碼:

    Microsoft Visual Basic.NET 程式碼

    Imports System
    Imports System.Data.OleDb

    Visual C#.NET 程式碼

    using System.Data.OleDb;
  6. 將下列程式碼加入至Main程序中:

    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 程式碼

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

    注意修改連接字串,根據您的環境而定。

  7. 按一下 [建置] 功能表的 [建置方案]。

  8. 在 [偵錯] 功能表上按一下
    [開始]。您會看到一個命令會顯示在主控台視窗。

  9. 在 Oracle SQL * 此外,執行時會顯示在主控台視窗的指令。

  10. 按下 ENTER 鍵。在 [主控台] 視窗中,您會看到 < 徵狀=""> 一節所述的例外狀況。

參考

如需有關 Microsoft OLE DB 提供者 oracle 的詳細資訊,請造訪下列 Microsoft 開發人員網路 (MSDN) 網站:

http://msdn2.microsoft.com/en-us/library/ms810685.aspx如需其他資訊,請按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:

用來描述 Microsoft 軟體更新標準術語的編號 824684描述

本文將所述之產品製造協力廠商均與 Microsoft 無關。Microsoft 對這些產品的效能或可靠性不作擔保,無論明示或暗示。

需要更多協助嗎?

想要其他選項嗎?

探索訂閱權益、瀏覽訓練課程、瞭解如何保護您的裝置等等。

社群可協助您詢問並回答問題、提供意見反應,以及聆聽來自具有豐富知識的專家意見。

這項資訊有幫助嗎?

您對語言品質的滿意度如何?
以下何者是您會在意的事項?
按下 [提交] 後,您的意見反應將用來改善 Microsoft 產品與服務。 您的 IT 管理員將能夠收集這些資料。 隱私權聲明。

感謝您的意見反應!

×