منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : مشكلة فى كود transaction
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم
قمت بإنشاء 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
وعليكم السلام ورحمة الله
كودك سليم قد يكون في الترتيب
لدي برنامج اعمل فيه حاليا  ويعمل معي بشكل جيد ارفق لك مقطعا منه

PHP كود :
           Dim cmd1 As SqlCommand con.CreateCommand()
 
           cmd1.CommandTimeout 120
            Dim transaction 
As SqlTransaction con.BeginTransaction
            cmd1
.Connection con
            cmd1
.Transaction transaction 
تسلم اخي.
لكن ما الحل هل اقوم بتبديل الاكواد
ولماذا عند ترك الداتا جريد فارغة لم يظهر خطاء وبيتم الحفظ فى جدول واحد
لماذا لا يوجد مساعدة من فضلكم
الترانزاكشن يربط مره واحده مع 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 
ال transaction
علشان لو فيه خطاء اى كود يتراجع عن الآخر
ولم يتم حفظ فى جدول. والجدول الآخر لا