منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
[VB.NET] كيف أستخدم TRansaction حتى أضمن تطبيق الكود بشكل جيد - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182)
+--- قسم : قسم اسئلة VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=183)
+--- الموضوع : [VB.NET] كيف أستخدم TRansaction حتى أضمن تطبيق الكود بشكل جيد (/showthread.php?tid=38417)



كيف أستخدم TRansaction حتى أضمن تطبيق الكود بشكل جيد - sniperjawadino - 09-05-21

السلام عليكم إخواني

أرجوا منكم قراءة هذ االكود فقد قمت بترتيبه حتى أسهل مساعدتكم لي

أقوم بترحيل قاعدة بيانات محلية إللى قاعدة أخرى بعيدة   (سطر بسطر)

كيف أستخدم TRansaction حتى أضمن تطبيق الكود بشكل جيد


ملاحظة : Transaction شغالة جيدا عندما تكون العملية على نفس القاعدة 
ملاحظة : قمت بوضع INSERT و UPDATE بذلك الشكل فقط لأوضح الفكرة 







جزاكم الله كل خير على مد يد المساعدة


RE: كيف أستخدم TRansaction حتى أضمن تطبيق الكود بشكل جيد - ابراهيم ايبو - 09-05-21

السلام عليكم ورحمة الله وبركاته
اخي الكريم Sniper 
انت لم تذكر كيف تقوم بحفظ السجلات هل تأخذها من الداتا غرايد ام من الداتا تابل ؟ وهل في كل مرة تقوم بنقل سجل واحد ام كل السجلات دفعة واحدة


RE: كيف أستخدم TRansaction حتى أضمن تطبيق الكود بشكل جيد - sniperjawadino - 09-05-21

شكرا أخي إبراهيم على الرد

البرنامج هو برنامج بيع لأحد المتاجر
كل ساعة هناك بيانات جديدة
فبالتالي وضعت الكود في TIMER و أقوم بنقل سجل واحد كل ثانية (يمكنني تطوير الفكرة في وقت لاحق)
آخد السجلات من الداتا غرايد اللتي تم تعبئتها من الداتا تابل


RE: كيف أستخدم TRansaction حتى أضمن تطبيق الكود بشكل جيد - ابراهيم ايبو - 09-05-21

على العموم اخي sniper
اليك هذين الرابطين اجزى الله اصحابها كل الخير
https://www.youtube.com/watch?v=br8DkBklahE&t=735s

https://www.youtube.com/watch?v=eE6dPpK6O68&t=2141s
من ناحيتي ساضع لك كود حفظ استخدمته في حفظ راس الفاتورة وتفاصيل الفاتورة  حيث يتم الحفظ (عبر اللوب) من الداتاغرايد فيو فاما ان يتم الحفظ في الجدولين او لايحفظ في حال حدوث خطأ اتمنى ان يفيدك
دمت بخير ياغالي


كود :
Private Sub Btn_Save_Click(sender As Object, e As EventArgs) Handles Btn_Save.Click

       Dim trans As SqlTransaction = Cn.BeginTransaction
       Cmd = New SqlCommand
       Cmd.Connection = Cn
       Cmd.Transaction = trans
       Cn.Open()
       Try
           Cmd.CommandText = "insert into BuyMaster(Buy_Id,Buy_Code,Buy_Date,Imp_Name,Total_Buy) Values(@Buy_Id,@Buy_Code,@Buy_Date,@Imp_Name,@Total_Buy)"
           Cmd.Parameters.Add(New SqlParameter("@Buy_Id", SqlDbType.Int)).Value = Txt_Buy_id.Text
           Cmd.Parameters.Add(New SqlParameter("@Buy_Code", SqlDbType.NVarChar)).Value = Txt_Buy_Code.Text
           Cmd.Parameters.Add(New SqlParameter("@Buy_Date", SqlDbType.Date)).Value = CDate(Dtp_Buy_Date.Value.ToString("dd-MM-yyyy"))
           Cmd.Parameters.Add(New SqlParameter("@Imp_Name", SqlDbType.NVarChar)).Value = Cmb_Imp_Name.Text
           Cmd.Parameters.Add(New SqlParameter("@Total_Buy", SqlDbType.Decimal)).Value = Lbl_TotalBill.Text
           Cmd.ExecuteNonQuery()
           Cmd.Parameters.Clear()

           For i As Integer = 0 To Dgv_BuyBill.Rows.Count - 1
               Cmd.CommandText = "insert into BuyDetail(Buy_Bill_Code,Itm_Code,itm_Name,Itm_Price,Quantity,Amount,State) Values(@Buy_Bill_Code,@Itm_Code,@itm_Name,@Itm_Price,@Quantity,@Amount,@State)"

               Cmd.Parameters.Clear() ' هذا السطر مهم جدا لانه يفرغ الباراميترات في كل لفة من لوب مما يمنع تكرار القيم

               Cmd.Parameters.Add(New SqlParameter("@Buy_Bill_Code", SqlDbType.NVarChar)).Value = Dgv_BuyBill.Rows(i).Cells("Buy_Bill_Code").Value
               Cmd.Parameters.Add(New SqlParameter("@Itm_Code", SqlDbType.NVarChar)).Value = Dgv_BuyBill.Rows(i).Cells("Itm_Code").Value
               Cmd.Parameters.Add(New SqlParameter("@itm_Name", SqlDbType.NVarChar)).Value = Dgv_BuyBill.Rows(i).Cells("itm_Name").Value
               Cmd.Parameters.Add(New SqlParameter("@Itm_Price", SqlDbType.Decimal)).Value = CDbl(Dgv_BuyBill.Rows(i).Cells("Price").Value.ToString())
               Cmd.Parameters.Add(New SqlParameter("@Quantity", SqlDbType.Int)).Value = Dgv_BuyBill.Rows(i).Cells("Quantity").Value
               Cmd.Parameters.Add(New SqlParameter("@Amount", SqlDbType.Decimal)).Value = CDbl(Dgv_BuyBill.Rows(i).Cells("Amount").Value.ToString())
               Cmd.Parameters.Add(New SqlParameter("@State", SqlDbType.Bit)).Value = True
               Cmd.ExecuteNonQuery()
           Next
           trans.Commit()
           MessageBox.Show("تم حفظ البيانات بنجاح", "حفظ", MessageBoxButtons.OK, MessageBoxIcon.Information)

       Catch ex As Exception
           trans.Rollback()

           MessageBox.Show(ex.Message)
           'MessageBox.Show("خطأ في البيانات المدخلة لم يتم الحفظ ", "خطأ", MessageBoxButtons.OK, MessageBoxIcon.Error)
       Finally
           If Cn.State = ConnectionState.Open Then Cn.Close()
       End Try
       Cn.Close()
   End Sub



RE: كيف أستخدم TRansaction حتى أضمن تطبيق الكود بشكل جيد - sniperjawadino - 09-05-21

شكرا شكرا شكرا أخي ابراهيم على الرابطين و على الكود الذي إستخدمته أنت سيجعلني أصحح أخطائي
جزاك الله من فضله على مساعدتك

فقط مشكلتي في الكود هو إستخدام Transaction مع إثنان من قواعد البيانات واحدة محلية و الثانية بعيدة
Transaction بالطريقة العادية لا يستطيع عمل ذلك
وجدت في مواقع أجنبية إستخدام TransactionScope فقط لم أفهم الطريقة جيدا ب C#


RE: كيف أستخدم TRansaction حتى أضمن تطبيق الكود بشكل جيد - ابراهيم ايبو - 09-05-21

اخي البرمجة بحر وما اوتيت منه الا نقطة 
لم استخدم حفظ بيانات في قاعدة محلية واخرى بعيدة بل لم استخدم الى الان سوى المحلية كوني لم انجز برامج بعد 
اشكرك على TransactionScope ساقرا عنها ان شاء الله 


RE: كيف أستخدم TRansaction حتى أضمن تطبيق الكود بشكل جيد - sniperjawadino - 09-05-21

ابراهيم والله إستفدنا منك كثيرا
شكرا لك على مجهودك