نمایش نتایج 1 تا 9 از 9

نام تاپیک: resume و resume next

  1. #1
    کاربر دائمی
    تاریخ عضویت
    شهریور 1382
    محل زندگی
    هلند
    پست
    1,709

    resume و resume next

    سلام
    قبلا در وی بی 6 دستورات resume و resume next داشتیم ایا معادلی در دات نت دارند یا خیر؟

  2. #2
    کاربر دائمی آواتار Microsoft.net
    تاریخ عضویت
    آبان 1382
    محل زندگی
    مشهد
    پست
    584

    نقل قول: resume و resume next

    این دستورات هم پشتیبانی میشوند ولی توصیه نمیشن ! ساختار Try ... Catch به عنوان جانشین شی گرای تشخصی خطا توصیه میشه

  3. #3
    کاربر دائمی
    تاریخ عضویت
    شهریور 1382
    محل زندگی
    هلند
    پست
    1,709

    نقل قول: resume و resume next

    نقل قول نوشته شده توسط Microsoft.net مشاهده تاپیک
    این دستورات هم پشتیبانی میشوند ولی توصیه نمیشن ! ساختار Try ... Catch به عنوان جانشین شی گرای تشخصی خطا توصیه میشه
    سلام
    منهم قبول دارم که این دستورات پشتیبانی میشوند اما من میخوام از try ... catch استفاده کنم طوریکه بتوانم اگر خطایی صورت گرفت از کل try خارج نشم بلکه برگردم به خط بعد از خطا.

    دقیقتر بگم :
    مثلا میخوام یکسری اطلاعات از بانک بخونم که شامل 20 فیلده حال در فیلد دهم بنا به دلایلی error میده و دستور try خط بعد از 10 رو حساب نکرده و کلا به finally پرش میکنه در حالی که میخوام از فیلد 11 به بعد را هم بخونه

  4. #4
    کاربر دائمی آواتار Microsoft.net
    تاریخ عضویت
    آبان 1382
    محل زندگی
    مشهد
    پست
    584

    نقل قول: resume و resume next

    خوب این یعنی داری برنامه ای مینوسی که توش ابهامه ! و این متناقضه با اصل شی گراییه. یا سناریو کد نویسیتو عوض کن یا مجبوری از همون دستور به اصطلاح کثیف resume next استفاده کنی
    اگه خطی از برنامت Run time error داشته باشه بی معنیه که خط بعدی اجرا بشه و انتظار داشته باشی خروجی صحیحی تحویل بگیری چرا که اگه رویه مناسبی رو برای کد نویسی استفاده کرده باشی قطعا هر خط کدت داره یک وظیفه ای رو انجام میده و حتما یک جایی داری از نتیجه عملیات اون خط کد استفاده میکنی و گرنه اون خط کدت کلا اضافیه و باید حذفش کنی !!
    من فکر میکنم سناریوی کد نویسیتو یک بازنگری بکن

  5. #5
    کاربر دائمی
    تاریخ عضویت
    شهریور 1382
    محل زندگی
    هلند
    پست
    1,709

    نقل قول: resume و resume next

    نقل قول نوشته شده توسط Microsoft.net مشاهده تاپیک
    خوب این یعنی داری برنامه ای مینوسی که توش ابهامه ! و این متناقضه با اصل شی گراییه. یا سناریو کد نویسیتو عوض کن یا مجبوری از همون دستور به اصطلاح کثیف resume next استفاده کنی
    اگه خطی از برنامت Run time error داشته باشه بی معنیه که خط بعدی اجرا بشه و انتظار داشته باشی خروجی صحیحی تحویل بگیری چرا که اگه رویه مناسبی رو برای کد نویسی استفاده کرده باشی قطعا هر خط کدت داره یک وظیفه ای رو انجام میده و حتما یک جایی داری از نتیجه عملیات اون خط کد استفاده میکنی و گرنه اون خط کدت کلا اضافیه و باید حذفش کنی !!
    من فکر میکنم سناریوی کد نویسیتو یک بازنگری بکن
    سلام
    دوست عزیز منهم میدانم اینا رو اما بعضی جاها واقعا لازم میشه که خط دارای اشتباه مادیده گرفته بشه و کنترل برنامه به خط بعدی بره !
    یعنی هیچ راهی نداره ؟

  6. #6

    نقل قول: resume و resume next

    سلام دوست عزیز،
    دقیقتر بگم :
    مثلا میخوام یکسری اطلاعات از بانک بخونم که شامل 20 فیلده حال در فیلد دهم بنا به دلایلی error میده و دستور try خط بعد از 10 رو حساب نکرده و کلا به finally پرش میکنه در حالی که میخوام از فیلد 11 به بعد را هم بخونه
    از چه روشی برای خواندن این اطلاعات بهره می گیرید؟
    لطفا" کد این قسمت را در اینجا قرار دهید، چون این سناریو را می توان با Try--Catch--Finally یا Nested Try-Catch-Finally حل نمود، اما پیش از آن باید روش خود برای خواندن اطلاعات این 20 فیلد را ذکر نمایید،

    در ضمن کلیدواژه Resume در VB.Net نیز پشتیبانی میشود(اما استفاده از آن توصیه نمی شود)
    مثال هایی از MSDN:

    Sub ResumeStatementDemo()
    On Error GoTo ErrorHandler ' Enable error-handling routine.
    Dim x As Integer = 32
    Dim y As Integer = 0
    Dim z As Integer
    z = x / y ' Creates a divide by zero error
    Exit Sub ' Exit Sub to avoid error handler.
    ErrorHandler: ' Error-handling routine.
    Select Case Err.Number ' Evaluate error number.
    Case 6 ' "Divide by zero" error.
    y = 1 ' Sets the value of y to 1 and tries the calculation again.
    Case Else
    ' Handle other situations here....
    End Select
    Resume ' Resume execution at same line
    ' that caused the error.
    End Sub


    Public Sub OnErrorDemo()
    On Error GoTo ErrorHandler ' Enable error-handling routine.
    Dim x As Integer = 32
    Dim y As Integer = 0
    Dim z As Integer
    z = x / y ' Creates a divide by zero error
    On Error GoTo 0 ' Turn off error trapping.
    On Error Resume Next ' Defer error trapping.
    z = x / y ' Creates a divide by zero error again
    If Err.Number = 6 Then
    ' Tell user what happened. Then clear the Err object.
    Dim Msg As String
    Msg = "There was an error attempting to divide by zero!"
    MsgBox(Msg, , "Divide by zero error")
    Err.Clear() ' Clear Err object fields.
    End If
    Exit Sub ' Exit to avoid handler.
    ErrorHandler: ' Error-handling routine.
    Select Case Err.Number ' Evaluate error number.
    Case 6 ' Divide by zero error
    MsgBox("You attempted to divide by zero!")
    ' Insert code to handle this error
    Case Else
    ' Insert code to handle other situations here...
    End Select
    Resume Next ' Resume execution at same line
    ' that caused the error.
    End Sub
    I've just started tweeting!
    @Alireza_Maddah

  7. #7
    کاربر دائمی
    تاریخ عضویت
    شهریور 1382
    محل زندگی
    هلند
    پست
    1,709

    نقل قول: resume و resume next

    سلام
    جناب مداح اونی که من ذکر کردم یه مثال بود. اما یه نمونه کد هم میذارم از روشی که خودم برای خوندن استفاده میکنم .
    فرض بر اینه که ما گرید ویو داریم و کاربر با دابل کلیلک روی یک سطر فیلد ID که سطر اول را بر میدارد و در بانک جستجو میکند و فیلدی با شماره ID را پیدا و فیلدهای دیگر را بازیابی و روی فرم قرار میدهد. حال بنا به دلایلی در خواندن یکی از فیلدها - مثلا فیلد 4 دچار مشکل میشود ( مثلا فیلد قبلا اشتباه در یانک ذخیره شده و یا بنا به دلایلی معتبر نیست ) حال میخواهیم به جای این فیلد مقدار صفر روی فرم قرار بگیرد و بقیه فیلدها خوانده شوند.

    شیوه استفاده از try برای این وضعیت به چه شکل میباشد؟


    Dim InsertSql As String = ""
    Dim calc_ID As Double = 0
    Dim con As OleDbConnection
    Dim dr As OleDbDataReader
    Dim cmd As OleDbCommand
    Try
    With dgvCalculatie
    If Trim(.CurrentRow.Cells(0).Value.ToString).Length = 0 Then
    cmdSave.Text = "&Opslaan"
    Exit Sub
    End If
    cmdSave.Text = "&Wijzigen"
    calc_ID = .CurrentRow.Cells(0).Value
    InsertSql = "SELECT * FROM Calculatie_Main WHERE ID=" & calc_ID
    con = New OleDbConnection(basBazyan.GetProvider())
    con.Open()
    cmd = New OleDbCommand(InsertSql, con)
    dr = cmd.ExecuteReader()
    dr.Read()
    lbl_MateriaalCode.Text = calc_ID
    BedrijfsCode = dr("BedrijfsCode").ToString
    cboKlant.Text = dr("BedrijfsNaam").ToString
    txtAdres.Text = dr("BedrijfsAdres").ToString
    txtPlaats.Text = dr("BedrijfsPlaats").ToString
    txtContactPersoon.Text = dr("BedrijfsContactPersoon").ToString
    '---------------------------------------------------------------- Calculatie
    txtUitTeVoeren.Text = dr("CalculatieWerkLocatie").ToString
    txtContactPersoon2.Text = dr("CalculatieContactPersoon").ToString
    txtTelNmmer.Text = dr("CalculatieTelNummer").ToString
    txtReferentieNr.Text = dr("CalculatieReferentieNummer").ToString
    txtOmschrijving.Text = dr("CalculatieOmschrijving").ToString
    '---------------------------------------------------------------- BasisMateriaal
    cbo1_MateriaalSoort.Text = dr("BasisMateriaalSoort").ToString
    txt1_Vloeroppervlak.Text = dr("BasisVloer").ToString
    txt1_M2Prijs.Text = FormatCurrency(dr("Basism2Prijs").ToString)
    txt1_TotaalPrijs.Text = FormatCurrency(dr("BasisTotaalPrijs").ToString)
    txt1_ReparatieAantal.Text = dr("BasisReparatie").ToString
    txt1_LitePrijs.Text = FormatCurrency(dr("BasisLiterPrijs").ToString)
    txt1_TotaalReparatie.Text = FormatCurrency(dr("BasisTotaalReparatie").ToString )
    txt1_Bijzonderheiden.Text = dr("BasisBijzonderheden").ToString

    Me.GridViewsSetting4Edit(dgvAantaal.Name, lbl_MateriaalCode.Text)
    Me.GridViewsSetting4Edit(dgvAanvul.Name, lbl_MateriaalCode.Text)
    End With
    Catch ex As Exception
    MsgBox(ex.Message)
    End Try


  8. #8
    کاربر دائمی آواتار Microsoft.net
    تاریخ عضویت
    آبان 1382
    محل زندگی
    مشهد
    پست
    584

    نقل قول: resume و resume next

    نقل قول نوشته شده توسط Hossein Bazyan مشاهده تاپیک
    سلام
    دوست عزیز منهم میدانم اینا رو اما بعضی جاها واقعا لازم میشه که خط دارای اشتباه مادیده گرفته بشه و کنترل برنامه به خط بعدی بره !
    یعنی هیچ راهی نداره ؟
    خوب از همون Resume next استفاده کن بره دیگه !

  9. #9

    نقل قول: resume و resume next

    دوست عزیز، شما می توانید از ساختار Try-Catch-Finally برای این منظور استفاده نمایید و راه های متفاوتی نیز وجود دارد،
    یک پیشنهاد:
    یک متد جدید ایجاد نمایید که یک IDataReader و نام فیلد را از از ورودی گرفته و مقدار را به خروجی بازگرداند و در این متد از ساختار ذکر شده بهره گیرید: مانند:

    Public Function GetValue(ByVal dataReader As IDataReader, ByVal fieldName As String) As Object
    Dim result As Object = Nothing
    Try
    result = dataReader(fieldName)
    Catch ex As Exception
    'Do Something Here
    result = String.Empty
    Finally
    'Do Something Here
    End Try
    Return result
    End Function


    حال مثلا" به جای خط زیر:

    cbo1_MateriaalSoort.Text = dr("BasisMateriaalSoort").ToString

    از کد زیر استفاده نمایید:

    cbo1_MateriaalSoort.Text = GetValue(dr,"BasisMateriaalSoort").ToString

    البته کد فوق یک مثال ساده می باشد و برای تطبیق با نیازهای پروژه شما باید تغییراتی در آن داده شود،
    در این حالت اگر در خواندن مقدار هر یک از فیلد ها خطایی رخ دهد، در خواندن مقادیر بقیه فیلدها خللی وارد نمی شود،
    در ضمن، در بلوک ّFinally می بایست شیء OleDbConnection را Close و Dispose نمایید تا همیشه از بسته شدن کانکشن با دیتابیس اطمینان حاصل نمایید، یا اینکه از ساختار Using بهره بگیرید تا پس از خارج شدن از این بلوک، شیء OleDbConnection به طور خودکار Dispose شود:

    Using connection As New OleDbConnection("connectionString")
    'Your Code Goes Here
    End Using
    I've just started tweeting!
    @Alireza_Maddah

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •