تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[VB.NET] مشكلة فى كود transaction
#1
السلام عليكم
قمت بإنشاء transaction
لتراجع عن الحفظ عند وجود خطاء
عبارة عن جدول رأس الفاتورة
وجدول الفاتورة
قمت بتجربة الكود اول مرة اشتغل. لكن بعد التجربة مرة أخري. لم يعمل 

لو تركت الداتا جريد فارغة والتكوين الخاص بجدول الفاتورة 

ليحفظ فى جدول رأس الفاتورة ولم يحفظ فى جدول الفاتورة بدون ظهور خطاء

ارجو التعديل أو تبديل الكود بكود افضل لمنع حدوث الخطاؤ

كود :
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
       'If conn.State = ConnectionState.Closed Then

       'End If
       conn.Open()
       '========تعريف المتغيرات
       Dim sql As String = ""
       Dim adp As SqlDataAdapter
       'dim DS as datatable
       Dim DT As DataTable
       Dim sqlCmd As SqlCommand
       Dim CmdBuild As SqlCommandBuilder
       Dim trans As SqlTransaction = conn.BeginTransaction
       Try
           '=========اضافة الجدول الرئيسي

           sqlCmd = New SqlCommand("select * from orderHiderTbl", conn)
           sqlCmd.Transaction = trans  ' فتح الترانسكشن
           adp = New SqlDataAdapter(sqlCmd)
           DT = New DataTable
           adp.Fill(DT)

           Dim DR = DT.NewRow
           DR!orderNumb = txtOrdNumb.Text
           DR!orderDate = ddate.Value.Date
           DR!userCode = txtUserCode.Text
           DR!CusCode = txtCusCode.Text
           DR!UserName = txtUserName.Text
           DR!TotleOrder = txtTotlBill.Text
           DR!CountItem = txtCountItem.Text
           DR!TotlCommis = txtTotCoimm.Text
           DR!SumItem = txtSumItem.Text
           DT.Rows.Add(DR)
           CmdBuild = New SqlCommandBuilder(adp)
           adp.Update(DT)
           '=========حفظ جدول التفاصيل
           sql = "select * from OrdersTbl"
           sqlCmd = New SqlCommand(sql, conn)
           sqlCmd.Transaction = trans
           adp = New SqlDataAdapter(sqlCmd)

           DT = New DataTable
           adp.Fill(DT)
           For i = 0 To dvgOrder.Rows.Count - 1
               DR = DT.NewRow
               DR!orderNumb = txtOrdNumb.Text
               DR!ItemCode = dvgOrder.Rows(i).Cells(0).Value
               DR!ItemPrice = dvgOrder.Rows(i).Cells(5).Value
               DR!qty = dvgOrder.Rows(i).Cells(6).Value
               DR!SumPrice = dvgOrder.Rows(i).Cells(7).Value
               DR!TotlCommis = dvgOrder.Rows(i).Cells(8).Value
               DR!itemRequired = dvgOrder.Rows(i).Cells(9).Value
               DT.Rows.Add(DR)
               CmdBuild = New SqlCommandBuilder(adp)
               adp.Update(DT)
           Next
           trans.Commit()
           MsgBox("تمت عملية الاضافة بنجاح", MessageBoxIcon.Information, "رسالة تاكيد")
       Catch ex As Exception
           trans.Rollback()
           MsgBox(ex.Message, MessageBoxIcon.Error, "خطاء")
       End Try



   End Sub
الرد }}}
تم الشكر بواسطة:
#2
وعليكم السلام ورحمة الله
كودك سليم قد يكون في الترتيب
لدي برنامج اعمل فيه حاليا  ويعمل معي بشكل جيد ارفق لك مقطعا منه

PHP كود :
           Dim cmd1 As SqlCommand con.CreateCommand()
 
           cmd1.CommandTimeout 120
            Dim transaction 
As SqlTransaction con.BeginTransaction
            cmd1
.Connection con
            cmd1
.Transaction transaction 
الرد }}}
تم الشكر بواسطة: new_programer , ابراهيم ايبو
#3
تسلم اخي.
لكن ما الحل هل اقوم بتبديل الاكواد
ولماذا عند ترك الداتا جريد فارغة لم يظهر خطاء وبيتم الحفظ فى جدول واحد
الرد }}}
تم الشكر بواسطة: ابراهيم ايبو
#4
لماذا لا يوجد مساعدة من فضلكم
الرد }}}
تم الشكر بواسطة:
#5
الترانزاكشن يربط مره واحده مع command واحد

انت عندما عملت SqlCommand في الجزء (حفظ جدول التفاصيل) فانت الغيت الاول

PHP كود :
   Private Sub Button2_Click(ByVal sender As System.ObjectByVal e As System.EventArgsHandles Button2.Click
        If conn
.State ConnectionState.Closed Then conn.Open()
 
       '========تعريف المتغيرات
        Dim sqlCmd As New SqlCommand
        Dim trans As SqlTransaction = conn.BeginTransaction
        Try
            sqlCmd.Connection = conn
            sqlCmd.Transaction = trans  ' 
فتح الترانسكشن
            
'=========اضافة الجدول الرئيسي
            sqlCmd.CommandText = "INSERT INTO orderHiderTbl(orderNumb,orderDate,userCode,CusCode,UserName,TotleOrder,CountItem,TotlCommis,SumItem)VALUES(@orderNumb,@orderDate,@userCode,@CusCode,@UserName,@TotleOrder,@CountItem,@TotlCommis,@SumItem)"
            sqlCmd.Parameters.Clear()
            '
sqlCmd.Parameters.AddWithValue("@orderNumb"txtOrdNumb.Text)
 
           'sqlCmd.Parameters.AddWithValue("@orderDate", ddate.Value.Date)
            '
sqlCmd.Parameters.AddWithValue("@userCode"txtUserCode.Text)
 
           'sqlCmd.Parameters.AddWithValue("@CusCode", txtCusCode.Text)
            '
sqlCmd.Parameters.AddWithValue("@UserName"txtUserName.Text)
 
           'sqlCmd.Parameters.AddWithValue("@TotleOrder", txtTotlBill.Text)
            '
sqlCmd.Parameters.AddWithValue("@CountItem"txtCountItem.Text)
 
           'sqlCmd.Parameters.AddWithValue("@TotlCommis", txtTotCoimm.Text)
            '
sqlCmd.Parameters.AddWithValue("@SumItem"txtSumItem.Text)
 
           sqlCmd.ExecuteNonQuery()
 
           '=========حفظ جدول التفاصيل
            sqlCmd.CommandText = "INSERT INTO OrdersTbl(orderNumb,ItemCode,ItemPrice,qty,SumPrice,TotlCommis,itemRequired)VALUES(@orderNumb,@ItemCode,@ItemPrice,@qty,@SumPrice,@TotlCommis,@itemRequired)"
            For Each r As DataGridViewRow In dvgOrder.Rows
                If r.IsNewRow Then Exit For
                sqlCmd.Parameters.Clear()
                '
sqlCmd.Parameters.AddWithValue("@orderNumb"txtOrdNumb.Text)
 
               'sqlCmd.Parameters.AddWithValue("@ItemCode", r.Cells(0).Value)
                '
sqlCmd.Parameters.AddWithValue("@ItemPrice"r.Cells(5).Value)
 
               'sqlCmd.Parameters.AddWithValue("@qty", r.Cells(6).Value)
                '
sqlCmd.Parameters.AddWithValue("@SumPrice"r.Cells(7).Value)
 
               'sqlCmd.Parameters.AddWithValue("@TotlCommis", r.Cells(8).Value)
                '
sqlCmd.Parameters.AddWithValue("@itemRequired"r.Cells(9).Value)
 
               sqlCmd.ExecuteNonQuery()
 
           Next
            trans
.Commit()
 
           MsgBox("تمت عملية الاضافة بنجاح"MessageBoxIcon.Information"رسالة تاكيد")

 
       Catch ex As Exception
            trans
.Rollback()
 
           MsgBox(ex.MessageMessageBoxIcon.Error"خطاء")
 
       End Try
 
   End Sub 
الرد }}}
تم الشكر بواسطة: new_programer
#6
ال transaction
علشان لو فيه خطاء اى كود يتراجع عن الآخر
ولم يتم حفظ فى جدول. والجدول الآخر لا
الرد }}}
تم الشكر بواسطة:



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


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