الأعراض

الاتصال بقاعدة بيانات Oracle باستخدام موفر Microsoft OLE DB ل Oracle (MSDAORA) ومن ثم إنهاء الاتصال على الملقم. عند فتح اتصال جديد لقاعدة بيانات Oracle من التطبيق الخاص بك، تتلقى رسالة خطأ استثناء ما يلي:

System.Data.OleDb.OleDbException: خطأ غير محددأورا-01012: لم يتم تسجيل دخولك

السبب

عندما تقوم بإنهاء الاتصال بقاعدة بيانات Oracle على جانب الملقم أثناء استخدام MSDAORA، يتم إرجاع قطع الاتصال إلى تجمع الاتصال. رمز تجمع الاتصال تتفاعل بشكل غير صحيح باستخدام الخاصية ريسيتكونيكشن من MSDAORA. عند هذه الخاصية غير معتمدة من قبل الموفر، يفسر رمز تجمع إعادة تعيين الاتصال وكلمة مرور صالحة من الاتصال بشكل غير صحيح. عند فتح التعليمات البرمجية للعميل اتصال جديد، يمكن استرداد قطع الاتصال التي تم إرجاعها إلى تجمع الاتصال. ولذلك، تظهر رسالة الخطأ المذكورة في قسم "الأعراض".

الحل

معلومات الإصلاح العاجل

الآن يتوفر إصلاح عاجل معتمد من Microsoft. ومع ذلك، الغرض منه هو حل المشكلة الموضحة في هذه المقالة فقط. تطبيقها فقط على الأنظمة التي تواجه هذه المشكلة بالتحديد. قد يتم إجراء اختبارات إضافية على هذا الإصلاح العاجل. ولذلك، إذا لم يكن تأثير المشكلة كبيرا، نوصي بالانتظار حتى الإصدار التالي من حزمة الخدمة الذي يحتوي على هذا الإصلاح العاجل.لحل هذه المشكلة فورا، اتصل بخدمات دعم العملاء في Microsoft للحصول على الإصلاح العاجل. للحصول على قائمة كاملة من أرقام هواتف خدمات دعم العملاء في Microsoft وعلى معلومات حول تكاليف الدعم، الرجاء زيارة موقع Microsoft التالي على الويب:

http://support.microsoft.com/contactus/?ws=supportملاحظة: في بعض الحالات، قد يتم إلغاء المصروفات التي تحتسب عادة على مكالمات الدعم إذا قرر أخصائي الدعم لدى Microsoft أن تحديثًا معيناً سوف يعمل على حل المشكلة. سيتم اضافة تكاليف الدعم المعتادة على أسئلة الدعم الإضافية والمشاكل التي لا يأهل على حلها للتحديث المطلوب.

معلومات الملف

يحتوي إصدار اللغة الإنجليزية من هذا الإصلاح العاجل على سمات الملف (أو سمات الملف الأحدث) المسرودة في الجدول التالي. يتم سرد التواريخ والأوقات الخاصة بهذه الملفات بالتوقيت العالمي المتفق عليه (UTC). عند عرض معلومات الملف، يتم تحويلها إلى التوقيت المحلي. لمعرفة الفرق بين التوقيت العالمي المتفق عليه والتوقيت المحلي، استخدم علامة التبويب المنطقة الزمنية في أداة التاريخ والوقت في "لوحة التحكم".

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 

هذا الإصلاح العاجل متوفراً كجزء من حزمة الإصلاحات الجديدة التراكمية. عند تلقي هذا الإصلاح العاجل من خدمات دعم منتجات Microsoft، سيكون رقم المقالة المسردة في حزمة الإصلاحات الجديدة 839801 ل MDAC 2.8 أو 836799 ل MDAC 2.7 SP1. لمزيد من المعلومات، راجع المقالة التالية في "قاعدة المعارف ل Microsoft":MDAC 2.8

إصلاح 839801 : تتوفر الإصلاحات العاجلة ل MDAC 2.8MDAC 2.7 SP1

إصلاح 836799 : تتوفر الإصلاحات العاجلة ل MDAC 2.7 Service Pack 1

الحالة

أقرت Microsoft أن هذه مشكلة في منتجات Microsoft المسردة في قسم "ينطبق على".

مزيد من المعلومات

خطوات إعادة إنشاء المشكلة

  1. Microsoft Visual Studio.NET.بدء تشغيل

  2. في القائمة ملف ، أشر إلىجديد، ثم انقر فوق المشروع. يظهر مربع الحوار مشروع جديد .

  3. ضمن أنواع المشاريع، انقر فوق مشاريع Visual Basic، ومن ثم انقر فوق تطبيق وحدة التحكمضمن قوالب.

  4. في المربع الاسم ، اكتباسم التطبيق، ثم انقر فوق موافق. بشكل افتراضي، يتم إنشاء ملف Module1.vb.إذا كنت تستخدم Microsoft Visual C#.NET، يتم إنشاء ملف Class1.cs.

  5. أضف التعليمات البرمجية التالية في الجزء العلوي:التعليمات البرمجية ل Microsoft Visual Basic.NET

    Imports SystemImports System.Data.OleDb

    رمز visual C#.NET

    using System.Data.OleDb;
  6. أضف التعليمات البرمجية التالية إلى الإجراء الرئيسي:التعليمات البرمجية ل Visual Basic.NET

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

    رمز 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":

824684 وصف للمصطلحات القياسية المستخدمة في وصف تحديثات برامج Microsoftمنتجات الجهات الأخرى المذكورة في هذه المقالة تابعة لشركات مستقلة عن Microsoft. لا تقدم Microsoft أي ضمان، سواء ضمنياً أو صريحا، بخصوص أداء هذه المنتجات أو كفائتها.

هل تحتاج إلى مزيد من المساعدة؟

الخروج من الخيارات إضافية؟

استكشف مزايا الاشتراك، واستعرض الدورات التدريبية، وتعرف على كيفية تأمين جهازك، والمزيد.