تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[سؤال] برأيكم ما هي الطريقة الأمثل لعرض رسائل الخطأ المعادة من قاعدة البيانات
#1
أنا أستخدم بالعادة الإجراء المدرج أدناه لإعادة رسائل الخطأ للمستخدم بعد اعتراضها باستخدام حلقة try..Catch
بس هي الطريقة بتفيدني أنا من أجل حل مشاكل البرنامج وبما أنو البرنامج عاملو للشركة التي أعمل بها إذا لا مشكلة بما أنني متواجد دوما ولكن إذا نفذت برنامج لزبون أعتقد أنه سيواجه بعض الإرباك نتيجة لرسائل الخطأ

برأيكم ما هي الطريقة الأمثل لإظهار رسائل خطأ للمستخدم وبنفس الوقت أفهم ما يجري ضمن الكود مع ملاحظة أن نوعية البرنامج الذي أتعامل معه هو Asp.net مع كود Vb.net وليس Desktop Application فهنا لايمكنني استخدام Windows Event Log لتسجيل الأخطاء وتتبعها

الكود
كود :
   Public Shared Function interpret_error_number(ByVal InErrorNumber As Integer) As String
       Dim ResponseMessage As String
       Select Case InErrorNumber
           Case 2627, 2601
               ResponseMessage = "خطأ تكرار قيمة موجودة"
           Case 102, 207
               ResponseMessage = "صيغة أمر خاطئة"
           Case 208
               ResponseMessage = "اسم عنصر خاطئ"
           Case 547
               ResponseMessage = "تضارب مع شرط مفتاح مرتبط"
           Case 245, 8114
               ResponseMessage = "خطأ تحويل بين أنواع البيانات"
           Case 4060
               ResponseMessage = "لا يمكن فتح قاعدة البيانات أو أن المخدم يرفض الإتصال"
           Case 137
               ResponseMessage = "متغير غير معرف"
           Case 134
               ResponseMessage = "المتغير معرف مسبقا"
           Case 515
               ResponseMessage = "إدراج قيمة فارغة في حقل لا يقبل قيم فارغة"
           Case 271
               ResponseMessage = "خطأ حماية بيانات. هل تحاول الكتابة إلى حفل حسابي"
           Case 241
               ResponseMessage = "خطأ تحويل قيمة نصية/رقمية إلى وقت/تاريخ"
           Case 209
               ResponseMessage = "اسم عمود غامض"
           Case 195
               ResponseMessage = "صيغة IS خاطئة"
           Case 156
               ResponseMessage = "صيغة استعلام خاطئة"
           Case 402
               ResponseMessage = "خطأ حماية بيانات. انواع البيانات غير متوافقة مع المعامل الممرر"
           Case 108
               ResponseMessage = "رقم الترتيب في قسم الترتيب خارج المجال المقبول"
           Case 189
               ResponseMessage = "المحددات الممرة للإجرائية ناقصة"
           Case 8187
               ResponseMessage = "المقبض المطلوب مستخدم من قبل أمر آخر"
           Case 8178
               ResponseMessage = "الاستعلام يتوقع محدد ولكنه غير ممرر للاستعلام"
           Case 4104
               ResponseMessage = "لم يتم العثور على المتغير متعدد الأجزاء"
           Case 8152
               ResponseMessage = "النص المدخل طويل جدا"
           Case 105
               ResponseMessage = "علامة تنصيص غير  مغلقة بعد النص في الاستعلام"
            Case Else
               ResponseMessage = "خطأ تنفيذ عملية في قاعدة البيانات"
       End Select
       Return ResponseMessage & ", رقم الخطأ: " & InErrorNumber
   End Function
الرد }}}
تم الشكر بواسطة:
#2
هل جربت log4net
https://www.youtube.com/watch?v=8SPJkCdp9vQ
الرد }}}
تم الشكر بواسطة: samerselo , myalsailamy
#3
لأ ما عندي فكرة عنو على كل حال مشكور بشوفو
الرد }}}
تم الشكر بواسطة:
#4
فيه طريقه انا استخدمها و تعمل تصيد للبرنامج كامل و عدة كلاسات انا قمت بتطويرها .. و سويت لها شرط اذا كان الرابط الموقع يحوي localhost فهو ع جهازي فيعرض الخطا بشكل عادي اما اذا كان غير ذلك فلا و اجعله يعرض صفحه بانه حدثت مشكله و يجب عليه التواصل مع الدعم الفني ما و يقوم بتسجيل الخطا في ملف txt
اسم معرفي : محمد يحيى
الرد }}}
تم الشكر بواسطة: samerselo
#5
مارايك بطريقة صنع ملف نصي تخزن به كل الاخطاء .. وبرنامج اخر ينقل محتواه لمكان اخر ويقوم بافراغه  بشكل دوري؟؟؟
مجرد فكرة سريعة
الرد }}}
تم الشكر بواسطة: samerselo , samerselo
#6
تمام هلق في عنا 3 حلول
بس أول شي رح جرب حل log4net لأنو مكتباته لقيتها بالـ Nuget
الرد }}}
تم الشكر بواسطة: سعود
#7
log4net ينشئ ملف نصي خاص
يمكن تخصيص مسار الملف ان أردت http://stackoverflow.com/questions/28159...s-log-file
الجدير بالذكر هنا أن log4net ليس لتسجيل الأخطاء فقط، يمكن استخدامه لتوثيق كل العمليات في البرنامج
تماما كما في برامج الـ setup دائما هناك ملف log لتسجيل الخطوات والنتائج
الرد }}}
تم الشكر بواسطة: الشاكي لله , سعود , سعود , samerselo , samerselo
#8
جرب استعمال try catch
و error provider
الرد }}}
تم الشكر بواسطة:
#9
طريقة الاخوان جميله جدا و عمليه ،، بالنسبه لي انا احب اتحكم بكتابة اكوادي لاقصى درجه ، و طالما اقدر اتعامل معاه  فلا بأس بكتابتي للاكواد لانها لا تمنعك من فعل ما تريد بعكس المكاتب المغلقه او المطوره من خلال غيرك ، لانها تتناسب مع مزاجي  ما عدى حالات متقدمه مثل تطوير مكتبة ضغط ملفات و عرض pdf و  و الخ  هنا تستخدم مكاتب خارجية  جاهزه  و معتمده  ، على العموم الشغله الي استخدمتها جدا بسيطه  وهي كالتالي  :  

تضيف هذا الكلاس لانه راح يحمل بيانات الخطأ  البرمجي الذي حصل  :  

كود :
    Public Class ReportErrorTable

#Region " Private variables "
        Private ReportErrorID_Att As Integer  '  رقم التقرير
        Private ReportErrorTitle_Att As String  '  عنوان التقرير
        Private ReportErrorInsertDate_Att As Date  '  تاريخ الحدوث
        Private ReportErrorInsertTime_Att As TimeSpan  '  وقت الحدوث
        Private ReportErrorPageLink_Att As String  '  رابط الصفحه
        Private ReportErrorContent_Att As String  '  محتوى التقرير
        Private ReportErrorUserID_Att As Integer  '  رقم المستخدم
        Private ReportErrortype_Att As String  '  نوع التقرير

#End Region

#Region " Properties "
        ''' <summary>
        '''رقم التقرير
        ''' </summary>
        Public Property ReportErrorID As Integer
            Get
                Return ReportErrorID_Att
            End Get
            Set(ByVal ReportErrorID_value As Integer)
                ReportErrorID_Att = ReportErrorID_value
            End Set
        End Property

        ''' <summary>
        '''عنوان التقرير
        ''' </summary>
        Public Property ReportErrorTitle As String
            Get
                Return ReportErrorTitle_Att
            End Get
            Set(ByVal ReportErrorTitle_value As String)
                ReportErrorTitle_Att = ReportErrorTitle_value
            End Set
        End Property

        ''' <summary>
        '''تاريخ الحدوث
        ''' </summary>
        Public Property ReportErrorInsertDate As Date
            Get
                Return ReportErrorInsertDate_Att
            End Get
            Set(ByVal ReportErrorInsertDate_value As Date)
                ReportErrorInsertDate_Att = ReportErrorInsertDate_value
            End Set
        End Property

        ''' <summary>
        '''وقت الحدوث
        ''' </summary>
        Public Property ReportErrorInsertTime As TimeSpan
            Get
                Return ReportErrorInsertTime_Att
            End Get
            Set(ByVal ReportErrorInsertTime_value As TimeSpan)
                ReportErrorInsertTime_Att = ReportErrorInsertTime_value
            End Set
        End Property

        ''' <summary>
        '''رابط الصفحه
        ''' </summary>
        Public Property ReportErrorPageLink As String
            Get
                Return ReportErrorPageLink_Att
            End Get
            Set(ByVal ReportErrorPageLink_value As String)
                ReportErrorPageLink_Att = ReportErrorPageLink_value
            End Set
        End Property

        ''' <summary>
        '''محتوى التقرير
        ''' </summary>
        Public Property ReportErrorContent As String
            Get
                Return ReportErrorContent_Att
            End Get
            Set(ByVal ReportErrorContent_value As String)
                ReportErrorContent_Att = ReportErrorContent_value
            End Set
        End Property

        ''' <summary>
        '''رقم المستخدم
        ''' </summary>
        Public Property ReportErrorUserID As Integer
            Get
                Return ReportErrorUserID_Att
            End Get
            Set(ByVal ReportErrorUserID_value As Integer)
                ReportErrorUserID_Att = ReportErrorUserID_value
            End Set
        End Property

        ''' <summary>
        '''نوع التقرير
        ''' </summary>
        Public Property ReportErrortype As String
            Get
                Return ReportErrortype_Att
            End Get
            Set(ByVal ReportErrortype_value As String)
                ReportErrortype_Att = ReportErrortype_value
            End Set
        End Property


#End Region


    End Class


الفكره في تصيد الخطأ في تطبيق  Asp.Net بالكامل  يكمن في وضع اكوادك بداخل  ملف  Global.asax تحديدا في  الحدث  Application_Error  هنا  عندما يكون هناك رابط مفقود بالموقع او  حصل خطا في قاعدة البيانات  او  خطأ منطقي  يتم تفعيل هذا الحدث  ،  طبعا هذا الكود الخاص بي  لعملية تعبئة بيانات الخطا في متغير من نوع الكلاس الذي بالاعلى  ،  و هذا هو الكود  : 

كود :
  
    Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
        ' Code that runs when an unhandled error occurs
        If HttpContext.Current.Request.Url.AbsoluteUri.Contains("localhost") = False Then
            Dim con As HttpContext = HttpContext.Current
            Dim v = Server.GetLastError()
            Dim VisitNo As Integer = 0
            Dim oReportError As New ReportErrorTable
            oReportError.ReportErrorTitle = Trim(Convert.ToString(v.Message))
            oReportError.ReportErrorPageLink = Trim(Convert.ToString(con.Request.Url))
            oReportError.ReportErrorContent = Trim(Convert.ToString(v.InnerException))
            Try
                VisitNo = Val(System.Web.HttpContext.Current.Session("VisitorIDNo"))
            Catch ex As Exception
            End Try

            oReportError.ReportErrorUserID = VisitNo

             
            Dim HttpEx = TryCast(v, HttpException)
            If HttpEx IsNot Nothing AndAlso HttpEx.GetHttpCode() = 404 Then
                '   ' Invalid URL
                oReportError.ReportErrortype = Trim("Miss_Link")
                oReportError.insertIntoReportErrorTable()
                Server.Transfer("~/PageNotFound.aspx")
            Else
                ' ' Exception 
                oReportError.ReportErrortype = Trim("Error")
                oReportError.insertIntoReportErrorTable()
                ' ' Here save text file containing this error details
                Server.Transfer("~/PageShowError.aspx")
            End If
        End If
     
    End Sub



طبعا اذا كنت تشتغل على جهازك ما راح  يتفعل الكود و راح يظهر لك الخطا بالشاشة الصفراء لتحل الخطأ لكن عندما يرفع للسيرفر يتفعل الحدث و يمكن  تجربته على جهازك الحالي من خلال  حذف هذا السطر  : 

كود :
If HttpContext.Current.Request.Url.AbsoluteUri.Contains("localhost") = False Then


ايضا بالنسبه لي في عملية الاخطا التي تحصل بسبب  قواعد البيانات  ، بحث و وصلت لنتيجه وهو لماذا عندا يحصل خطا في المدخلات على جمل الاستعلام لا احفظ جملة الاستعلام بالمدخلات التي قام بها المستخدم  و حفظها في ملف  نصي و عندما اقوم بتجربته لا احتاج ان اسأل المستخدم ما الذي ادخلته كل ما احتاجه هو  جملة  Query  التي طبقها المستخدم على قاعدة البيانات  مضمنه بالمتغيرات  التي ادخلها و عندها اعرف سبب الخطا  ،،  و سأكتب عنها  المره القادمه اذا اسعفني الوقت ، لاني غالبا اتصفح المنتدى من خلال هاتفي 


تحياتي  ،،  وشكرا على الكود الذي شاركته
اسم معرفي : محمد يحيى
الرد }}}
تم الشكر بواسطة: samerselo , samerselo
#10
جميل أخ myalsailamy طرح مثير للاهتمام سأحاول تفريغ وقت لمراجعته
مشكلتي هي أنني انشغلت في بعض الأمور ولم أتابع ما طرح

على كل حال الجميع مشكورين على ردودهم وطبعا في كل فكرة فائدة
الرد }}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  هل من الممكن العمل على قاعدة بيانات اكسل على الفيجوال بيسك خالد كامل1 4 80 24-03-24, 02:00 AM
آخر رد: خالد كامل1
  [VB.NET] حل مشكلة الاتصال بقواعد البيانات access loay775 2 158 25-02-24, 06:29 AM
آخر رد: loay775
  ماهو حل هذا الخطأ في الكود melad2002 7 264 25-02-24, 12:25 AM
آخر رد: justforit
  معرفة رصيدي للهاتف النقال المتصل بالكمبيوتر وارسال رسائل نصية منه AHMED213 0 98 22-02-24, 11:47 AM
آخر رد: AHMED213
  انشاء قاعدة بيانات من ملف سكربت strongriseman 5 500 17-02-24, 02:57 PM
آخر رد: strongriseman
  سؤال عن عملية حذف سجل من قاعدة البيانات assuhimi 3 249 11-02-24, 08:43 PM
آخر رد: assuhimi
  فلترة datagridview بدون قاعدة بيانات صالح عبدالله 3 295 02-02-24, 04:07 PM
آخر رد: صالح عبدالله
  [VB.NET] منع تكرار البيانات في عند الادخال مبرمج صغير 1 2 255 24-01-24, 05:18 PM
آخر رد: مبرمج صغير 1
Photo [كود] مطلوب كود يستخدم الأوامر فقط لتحديث قاعدة بيانات بـ vb.net AhmedEissa 4 638 18-01-24, 11:40 PM
آخر رد: العتيق
  [VB.NET] مساعدة في استدعاء البيانات معينه من form الأول إلى form 2 بدون التعديل loay775 2 274 18-01-24, 05:04 PM
آخر رد: loay775

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم