الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

عمل ترانس اكشن للبرنامج

بدأه ahamdasp1 في 8 ديسمبر 2011 · 17 رد · 2,277 مشاهدة · في ADO.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

اريد عمل ترانس اكشن للفاتورة بحيث اذا حدث اي خطأ غير متوقع يقوم البرنامج تلقائيا بالتراجع عن الخطوات السابقة من تعديل في قاعدة البيانات مع العلم ان كود الفاتورة يشبة هذا:

con.connectionstring=str_con

con.open

التعليمة الاولى:

dim sql as string="هنا الامر"

dim cmd as new sqlcommand(sql,con)1

cmd.excutescalar

التعليمة الثانية:

dim sql1 as string="هنا الامر"

dim cmd1 as new sqlcommand(sql1,con)1

cmd1.excutescalar

التعليمة الثالثة:

dim sql2 as string="هنا الامر"

dim cmd2 as new sqlcommand(sql2,con)1

cmd2.excutescalar

وهكذا بالنسبة للتعليمات الباقية

ارجو المساعدة : :S :sad: :wacko:

#2

السلام عليكم ..

  1. رابط يشرح المناقلات بالتفصيل و افتبس من التعريف : الـ Transaction عبارة عن مجموعة من العمليات التي يتم التعامل معها علي أنها عملية واحدة فلا يصح نجاح عملية و فشل الأخرى... فالكل ناجح أو الكل فاشل .
  2. طريقة الاستخدام :
    SqlConnection connection = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True");
            	connection.Open();
            	SqlTransaction sqlTransaction = connection.BeginTransaction();
            	try
            	{
                	SqlCommand command = new SqlCommand();
                	command.Connection = connection;
                	command.Transaction = sqlTransaction;
                	command.CommandType = CommandType.Text;
                	command.CommandText = "insert into stud (name,class1,dep_id) values(@name,@class1,@dep_id)";
    
    
                	command.Parameters.Clear();
                	command.Parameters.Add("@name", SqlDbType.VarChar).Value = "MyName";
                	command.Parameters.Add("@class1", SqlDbType.Int).Value = 1;
                	command.Parameters.Add("@dep_id", SqlDbType.Int).Value = 2;
                	command.ExecuteNonQuery();
    
                	command.CommandText = "insert into Employee (EmpName) values(@EmpName)";
    
                	command.Parameters.Clear();
                	command.Parameters.Add("@EmpName", SqlDbType.VarChar).Value = "EmpName";
                	command.ExecuteNonQuery();
                	sqlTransaction.Commit();
            	}
            	catch (Exception ex)
            	{
                	MessageBox.Show(ex.Message);
                	sqlTransaction.Rollback();
            	}

2

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#3

السلام عليكم

شكرا لك اخي ولكني لم افهم المثال جيدا لاني استخدم vb.net كما انه في كل تعديل في قاعدة البياناتاقوم باضافة command جديدcmd1,cmd2,cm3......كمافي مثالي :wacko:

لو سمحت اريد ان تجري التعديل في الكود الذي وضعته:

con.connectionstring=str_con

con.open

التعليمة الاولى:

dim sql as string="هنا الامر"

dim cmd as new sqlcommand(sql,con)1

cmd.excutescalar

التعليمة الثانية:

dim sql1 as string="هنا الامر"

dim cmd1 as new sqlcommand(sql1,con)1

cmd1.excutescalar

التعليمة الثالثة:

dim sql2 as string="هنا الامر"

dim cmd2 as new sqlcommand(sql2,con)1

cmd2.excutescalar

1
#4

السلام عليكم ..

  1. تم تعديل الكود ..
    Dim str_con As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True"
    Dim con As New SqlConnection()
    con.ConnectionString = str_con
    con.Open()
    Dim sqlTransaction As SqlTransaction = con.BeginTransaction()
    Try
    
    	Dim sql As String = "DELETE FROM Employee;"
    	Dim cmd As New SqlCommand(sql, con)
    	cmd.Transaction = sqlTransaction
    	cmd.ExecuteScalar()
    
    	Dim sql1 As String = "DELETE FROM stud;"
    	Dim cmd1 As New SqlCommand(sql1, con)
    	cmd1.Transaction = sqlTransaction
    	cmd1.ExecuteScalar()
    
    
    
    	Dim sql2 As String = "insert into stud (name,class1,dep_id) values('myName',1,1)"
    	Dim cmd2 As New SqlCommand(sql2, con)
    	cmd2.Transaction = sqlTransaction
    	cmd2.ExecuteScalar()
    	sqlTransaction.Commit()
    Catch ex As Exception
    	sqlTransaction.Rollback()
    	MessageBox.Show(ex.Message)
    End Try

  2. لتحويل الــ CSharp إلى VB.net رابط
2

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#5

السلام عليكم

شكرا لك اخي على المساعدة سأقوم بتجربة الكود

1
#6

سيدي الكريم houssam11350_11350

انا اقوم بعمل ذلك من خلال stored procedure فيه العمليات المطلوبة

سأعطيك مثال

عندي فاتورة وهي مقسمة على جدولين الاول لنسميه h والثاني D وعند اضافة فاتورة جديدة يتم انقاص او زيادة الرصيد في المخزن

فأقوم بذلك من خلال جملتين insert وجملة update

وعند الحذف اقوم بذلك من خلال جملة update وجملتين delete

فهل الافضل ان استخدم جملة trans ,rollback

او ان هذه الطريقة جيدة

مع العلم اني اعرف استخدام هذه الجمل

فأفدنا برأيك ان امكن

تزودوا فأن خيرا الزاد التقوى

اللهم انصر اخواننا المسلمين المجاهدين في كل مكان

#7

السلام عليكم ...

أخي Jamalbootruba .

  1. طالما لديك جملتين (insert أو update أو Delete) .. فيجب استخدام الــ Transaction فإما يتم تنفيذ الجملتين معا أو لا يتم تنفيذ أي واحدة منهما.
  2. بالنسبة لاستخدام الــ Transaction من داخل لغة البرمجة أو من داخل الــ Stored Procedure ..فلا فرق من حيث النتيجة لأنه في النهاية الــ tranaction.Commit() الموجودة داخل كود الـ DOT Net تستدعي داخلها العبارة COMMIT TRANACTION .. و الرابط في أول مشاركة لي يوضح ذلك :22_12_05_09_12_23_1135314743Tran_.JPG أما من ناحية الأداء ... فالــ Stored Procedure أفضل (باعتقاد الكثيرين) .
  3. عندما تستخدم الــ Transaction من داخل الــ Stored Procedure , عليك استخدامها بالشكل الصحيح و فهم آلية عملها و لأوضح لك ذلك بمثال :
    1. افرض لدينا جدول بسيط Employee فيه حقلان ID و EmpName حيث أن الــ ID مفتاح رئيسي للجدول .
    2. هذا الجدول Employee فيه سجل واحد قيمه كمايلي : ID=1 , EmpName=Emp
    3. إليك هذا الكود الخاطئ منطقيا :

      INSERT INTO Employee (ID , EmpName) VALUES (1 , 'Em');

      INSERT INTO Employee (ID , EmpName) VALUES (2 , 'Em');
      COMMIT TRANSACTION
      	BEGIN TRANSACTION
      لاحظ أول عبارة insert تسبب تكرار في قيمة المفتاح الرئيسي و بالتالي تسبب خطأ و لا يتم إضافة أي سطر في الجدول لكن التنفيذ سيستمر و ينفذ العبارة الثانية للأسف .. و يتم إضافة سطر في الجدول .
    4. الكود الصحيح هو أنه يجب فحص وجود الخطأ بعد كل عملية تغيير في بيانات الجدول :

      INSERT INTO Employee (ID , EmpName) VALUES (1 , 'Em');
      IF @@ERROR <> 0 GOTO HANDLE_ERROR

      INSERT INTO Employee (ID , EmpName) VALUES (2 , 'Em');
      IF @@ERROR <> 0 GOTO HANDLE_ERROR
      COMMIT TRANSACTION


      HANDLE_ERROR:
      ROLLBACK TRAN
      	BEGIN TRANSACTION
    5. الــ SQL Server 2005 أصبح يدعم الــ TRY CATCH بالشكل التالي :

      BEGIN TRANSACTION
      INSERT INTO Employee (ID , EmpName) VALUES (1 , 'Em');
      INSERT INTO Employee (ID , EmpName) VALUES (2 , 'Em');
      COMMIT TRANSACTION

      END TRY
      BEGIN CATCH
      ROLLBACK TRAN
      PRINT 'Error Handled';
      RETURN -1;
      END CATCH
      BEGIN TRY

1

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#8

اشكر اخي الكريم على التوضيح وعلى فكرة استفدت من شرحك الكثير ولكن انا اقوم بالجميع اي الاضافة في الجدولين والتعديل في الجدول الاخر في نفس الاجراء

والذي استفدته هو عمل تراي كاتش فلمم يكن لدي علم بها داخل 2005

ةآسف لدي سؤال هل استطيع ان اتعامل مع الرسالة المرجعه من جملة Print من خلال الكود في VB.Net وكيف ذلك

تزودوا فأن خيرا الزاد التقوى

اللهم انصر اخواننا المسلمين المجاهدين في كل مكان

#9

السلام عليكم ..

اقتباس
ةآسف لدي سؤال هل استطيع ان اتعامل مع الرسالة المرجعه من جملة Print من خلال الكود في VB.Net وكيف ذلك

نعم يمكن ذلك من خلال بارمترات الخرج Output أي تسند القيمة إلى بارمتر الخرج بدلا من استخدام print وهنا رابط لمثال :Returning-string-from-storedprocedure

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#10

اخي الكريم لدي سؤال واسف ان اثقلت عليك حتى وان لم تجب على سؤالي فقد كفيت ووفيت

في الSQL server 2008 هناك تسطتيع عمل Break point ولكن لم تعمل معي بمعنى عندما اضع بريك على سطر معين واريد التنفيذ لعنده لأرى ماذا يحصل بعد ذلك لا يتوقف بل ينفذ الStored proc إلى اخره بدون توقف

فكيف اوقفه او ماهو طبيعة عمل البريك بوينت في الاس كيو ال

تزودوا فأن خيرا الزاد التقوى

اللهم انصر اخواننا المسلمين المجاهدين في كل مكان

#11

السلام عليكم ..

  1. عذرا على التأخر في الرد .
  2. ليس عندي sql server 2008 لكن sql server 2005 express ولم اجد خيار لإضافة break point من الــ management studio
  3. يمكن وضع الــ break Point في السيكوال من داخل الفيجوال استديو ..
    1. عرض كحتوى القاعدة في النافذة Servers Explorer .
    2. نقرة يمينية على الــ stored Procedure ثم Step Into Stored Procedure .
    3. يفتح كود الــ Stored Procedure .. بشكل عادي .. و يمكنك وضع نقطة توقف في المكان الذي تريده .. و لمتابعة التنفيذ اضفط F5 .
    4. sqlDebug1.gif
    5. sqlDebug3.tiny.gif
    6. رابط المصدر هنا
1

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#12

بارك الله فيك كفيت ووفيت وربي يجعلها في ميزان حسناتك

تزودوا فأن خيرا الزاد التقوى

اللهم انصر اخواننا المسلمين المجاهدين في كل مكان

#13

اخي الكريم ارفقت لك الخطأ الذي ظهر والفرق بين ما استخدمت انت واستخدمت انا هو ExecuteScalar فهل هذا هو سبب الخطأ وما الحل ان تكرمت

post-8078-072588800 1325877879_thumb.png

المرفقات
ErrorIamge.png

تزودوا فأن خيرا الزاد التقوى

اللهم انصر اخواننا المسلمين المجاهدين في كل مكان

#14

السلام عليكم ..

أخي Jamalbootruba بارك الله بك ..

  1. لا أرى التعليمة المسؤولة عن بداية المناقلة :
    Dim sqlTransaction As SqlTransaction = con.BeginTransaction()

    , يجب فتح الاتصال ثم بداية المناقلة ثم استخدم ما شئت من الــ commands ثم ثبت أو تراجع عن المناقلة , ارجع للمشاركات السابقة .. كي ترى طريقة الاستخدام بالشكل الصحيح ...

  2. في المشاركة رقم 4 و رقم 7 تم استخدام كل من ExecuteScalar و ExecuteNonQuery و لم تحصل مشكلة ...
  3. حسب صورتك المرفقة , هناك حلقة for .. ارجو أن لا تكون تعليمة المناقلة داخل الحلقة .. ممكن ترفق لنا الكود الخاص بــsaveRecord (إذا لم تحل المشكلة).

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#15

لا اخي الكريم التعليمة موجودة وحلقة التكرار كاملة وانت تعلم ان المحرر لا يجعل الكود يعمل الا ان تكون كل العبارات كاملة وصحيحة

وللعلم انا قمت بحفظ البيانات بدون Transaction ونجحت لكن معها يظهر الخطا السابق

والخطأ يبدأ عندما يصل المؤشر إلى ExecuteScalar وسوف ارفق لك الكود في المشاركة التالية

وهذا هو الكود

 Public Function SaveRecord() As Boolean
        DoConn()
        'Dim sqlTrans As SqlTransaction = Conn.BeginTransaction()
        'تعريف امر لتنفيذ الاجراء المخزن الخاص بالبيانات العامة
        Dim cmd As New SqlCommand("AddData", Conn)
        Try
            Using cmd
                With cmd
                    .CommandType = CommandType.StoredProcedure
                    Dim Param As New SqlParameter
                    .Parameters.Clear()
                    With Param
                        .DbType = DbType.Int32
                        .Direction = ParameterDirection.Output
                        .ParameterName = "@CompID"
                    End With
                    .Parameters.Add(Param)
                    .Parameters.AddWithValue("@CompName", txtCompName.Text)
                    .Parameters.AddWithValue("@CompNum", txtCompNum.Text)
                    .Parameters.AddWithValue("@DelgateName", txtDelgateName.Text)
                    .Parameters.AddWithValue("@IDNumGen", txtIDNumGen.Text)
                    .Parameters.AddWithValue("@MobileNum", txtMobileNum.Text)
                    .Parameters.AddWithValue("@Pic", strPic)
                    .Parameters.AddWithValue("@MembersNum", txtMembersNum.Text)
                    .Parameters.AddWithValue("@PhonesNum", txtPhonesNum.Text)
                    .Parameters.AddWithValue("@Contracts", txtContracts.Text)
                    .Parameters.AddWithValue("@ContStartDate", txtContStartDate.Text)
                    .Parameters.AddWithValue("@ContEndDate", txtContEndDate.Text)
                    .Parameters.AddWithValue("@AgencyName", txtAgencyName.Text)
                    .Parameters.AddWithValue("@IDNumAge", txtIDNumAge.Text)
                    .Parameters.AddWithValue("@MobileNumAge", txtMobileNumAge.Text)
                    .Parameters.AddWithValue("@AgencyDate", txtAgencyDate.Value)
                    .Parameters.AddWithValue("@DragActive", chkDragActive.Checked)
                    .Parameters.AddWithValue("@StopActive", chkStopActive.Checked)
                    .Parameters.AddWithValue("@DragNote", txtDragNote.Text)
                    .Parameters.AddWithValue("@StopNote", txtStopNote.Text)
                    .Parameters.AddWithValue("@UserID", 1)
                    .ExecuteNonQuery()
                    CompID = CInt(Param.Value)
                    If CompID = -1 Then
                        Throw New Exception
                    End If
                    If strPic.Length <> 0 Then
                        With My.Computer.FileSystem
                            .CopyFile(ofdPic.FileName, ServerPath & CompID.ToString & ".jpg")
                            strPic = ServerPath & CompID.ToString & ".jpg"
                        End With
                    End If
                End With
            End Using

            'تعريف امر لتنفيذ الاجراء المخزن الخاص بالهواتف مع حلقة التكرار
            For I = 0 To CInt(Val(txtPhonesNum.Text)) - 1
                Dim cmdP As New SqlCommand("AddPhone", Conn)
                Using cmdP
                    With cmdP
                        .CommandType = CommandType.StoredProcedure
                        Dim ParamPhone As New SqlParameter
                        .Parameters.Clear()
                        With ParamPhone
                            .DbType = DbType.Int32
                            .Direction = ParameterDirection.Output
                            .ParameterName = "@PhoneID"
                        End With
                        .Parameters.Add(ParamPhone)
                        .Parameters.AddWithValue("@CompID", CompID)
                        .Parameters.AddWithValue("@PhoneNum", CStr(dgvPhones.Rows(I).Cells("PhoneNum").Value))
                        .Parameters.AddWithValue("@Pic", strPic)
                        .ExecuteNonQuery()
                        PhoneID = CInt(ParamPhone.Value)
                        If PhoneID = -1 Then
                            Throw New Exception
                        End If
                    End With
                End Using
            Next

            'تعريف امر خاص بتنفيذ الاجراء المخزن الخاص بالحساب المشترك            
            Dim cmdSubs As New SqlCommand("AddSubsAccount", Conn)
            Using cmdSubs
                With cmdSubs
                    .CommandType = CommandType.StoredProcedure
                    .Parameters.Clear()
                    .Parameters.AddWithValue("@PhoneID", PhoneID)
                    .Parameters.AddWithValue("@Combine", chkCombine.Checked)
                    .Parameters.AddWithValue("@Credit", CDec(txtCredit.Text))
                    .Parameters.AddWithValue("@StartDate", txtStartDate.Text)
                    .Parameters.AddWithValue("@EndDate", txtEndDate.Text)
                    .ExecuteNonQuery()
                End With
            End Using

            'تعريف امر خاص بتنفيذ الاجراء المخزن الخاص بالاعضاء مع حلقة التكرار
            For I = 0 To CInt(Val(txtMembersNum.Text)) - 1
                Dim cmdMem As New SqlCommand("AddMembers", Conn)
                Using cmdMem
                    With cmdMem
                        .CommandType = CommandType.StoredProcedure
                        .Parameters.Clear()
                        .Parameters.AddWithValue("@CompID", CompID)
                        .Parameters.AddWithValue("@MemberName", CStr(dgvMemberInfo.Rows(I).Cells("MemberName").Value))
                        .Parameters.AddWithValue("@IDNumMem", CStr(dgvMemberInfo.Rows(I).Cells("IDNumMem").Value))
                        .ExecuteNonQuery()
                    End With
                End Using
            Next
            'sqlTrans.Commit()
            'اذا نجحت اكد على كل العمليات التي قامت على البيانات
            Return True
        Catch ex As Exception
            'sqlTrans.Rollback()
            'واذا فشلت الغي العمليات التي قامت على البيانات           
            Return False
        Finally
            DoCloseConn(Conn)
        End Try
    End Function

تزودوا فأن خيرا الزاد التقوى

اللهم انصر اخواننا المسلمين المجاهدين في كل مكان

#16

السلام عليكم ...

  1. لم تقم باسناد المناقلة إلى الكوماند .. كما هو موضح في الكود في المشاركات السابقة ..
             	.Transaction = sqlTrans

  2. هذا الكود .. بتصرف ..
     Public Function SaveRecord() As Boolean
        	Dim Conn As New SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database.mdf;Integrated Security=True;User Instance=True")
        	Conn.Open()
        	Dim sqlTrans As SqlTransaction = Conn.BeginTransaction
        	Dim CompID As Integer = -1, PhoneID As Integer = -1
    
        	'DoConn()
        	'تعريف امر لتنفيذ الاجراء المخزن الخاص بالبيانات العامة
        	Dim cmd As New SqlCommand("AddData", Conn)
        	Try
            	Using cmd
                	With cmd
                    	.Transaction = sqlTrans
                    	.CommandType = CommandType.StoredProcedure
                    	Dim Param As New SqlParameter
                    	.Parameters.Clear()
                    	With Param
                        	.DbType = DbType.Int32
                        	.Direction = ParameterDirection.Output
                        	.ParameterName = "@id"
                    	End With
                    	.Parameters.Add(Param)
                    	.Parameters.AddWithValue("@CompName", "CompName001")
                    	'.Parameters.AddWithValue("@CompNum", txtCompNum.Text)
                    	'.Parameters.AddWithValue("@DelgateName", txtDelgateName.Text)
                    	'.Parameters.AddWithValue("@IDNumGen", txtIDNumGen.Text)
                    	'.Parameters.AddWithValue("@MobileNum", txtMobileNum.Text)
                    	'.Parameters.AddWithValue("@Pic", strPic)
                    	'.Parameters.AddWithValue("@MembersNum", txtMembersNum.Text)
                    	'.Parameters.AddWithValue("@PhonesNum", txtPhonesNum.Text)
                    	'.Parameters.AddWithValue("@Contracts", txtContracts.Text)
                    	'.Parameters.AddWithValue("@ContStartDate", txtContStartDate.Text)
                    	'.Parameters.AddWithValue("@ContEndDate", txtContEndDate.Text)
                    	'.Parameters.AddWithValue("@AgencyName", txtAgencyName.Text)
                    	'.Parameters.AddWithValue("@IDNumAge", txtIDNumAge.Text)
                    	'.Parameters.AddWithValue("@MobileNumAge", txtMobileNumAge.Text)
                    	'.Parameters.AddWithValue("@AgencyDate", txtAgencyDate.Value)
                    	'.Parameters.AddWithValue("@DragActive", chkDragActive.Checked)
                    	'.Parameters.AddWithValue("@StopActive", chkStopActive.Checked)
                    	'.Parameters.AddWithValue("@DragNote", txtDragNote.Text)
                    	'.Parameters.AddWithValue("@StopNote", txtStopNote.Text)
                    	'.Parameters.AddWithValue("@UserID", 1)
                    	.ExecuteNonQuery()
                    	CompID = CInt(Param.Value)
                    	If CompID = -1 Then
                        	Throw New Exception
                    	End If
                    	'If strPic.Length <> 0 Then
                    	'	With My.Computer.FileSystem
                    	'    	.CopyFile(ofdPic.FileName, ServerPath & CompID.ToString & ".jpg")
                    	'    	strPic = ServerPath & CompID.ToString & ".jpg"
                    	'	End With
                    	'End If
                	End With
            	End Using
    
            	'تعريف امر لتنفيذ الاجراء المخزن الخاص بالهواتف مع حلقة التكرار
            	For I = 0 To CInt("5") - 1
                	Dim cmdP As New SqlCommand("AddPhone", Conn)
                	Using cmdP
                    	With cmdP
                        	.Transaction = sqlTrans
                        	.CommandType = CommandType.StoredProcedure
                        	Dim ParamPhone As New SqlParameter
                        	.Parameters.Clear()
                        	With ParamPhone
                            	.DbType = DbType.Int32
                            	.Direction = ParameterDirection.Output
                            	.ParameterName = "@PhoneID"
                        	End With
                        	.Parameters.Add(ParamPhone)
                        	.Parameters.AddWithValue("@CompID", CompID)
                        	.Parameters.AddWithValue("@PhoneNum", I)
                        	'.Parameters.AddWithValue("@Pic", strPic)
                        	.ExecuteNonQuery()
                        	PhoneID = CInt(ParamPhone.Value)
                        	If PhoneID = -1 Then
                            	Throw New Exception
                        	End If
                    	End With
                	End Using
            	Next
    
            	'تعريف امر خاص بتنفيذ الاجراء المخزن الخاص بالحساب المشترك        	
            	'Dim cmdSubs As New SqlCommand("AddSubsAccount", Conn)
            	'Using cmdSubs
            	'	With cmdSubs
            	'.Transaction = sqlTrans 
            	'    	.CommandType = CommandType.StoredProcedure
            	'    	.Parameters.Clear()
            	'    	.Parameters.AddWithValue("@PhoneID", PhoneID)
            	'    	.Parameters.AddWithValue("@Combine", chkCombine.Checked)
            	'    	.Parameters.AddWithValue("@Credit", CDec(txtCredit.Text))
            	'    	.Parameters.AddWithValue("@StartDate", txtStartDate.Text)
            	'    	.Parameters.AddWithValue("@EndDate", txtEndDate.Text)
            	'    	.ExecuteNonQuery()
            	'	End With
            	'End Using
    
            	'تعريف امر خاص بتنفيذ الاجراء المخزن الخاص بالاعضاء مع حلقة التكرار
            	'For I = 0 To CInt(4) - 1
            	'	Dim cmdMem As New SqlCommand("AddMembers", Conn)
            	'	Using cmdMem
            	'    	With cmdMem
            	'.Transaction = sqlTrans 
            	'        	.CommandType = CommandType.StoredProcedure
            	'        	.Parameters.Clear()
            	'        	.Parameters.AddWithValue("@CompID", CompID)
            	'        	.Parameters.AddWithValue("@MemberName", CStr(dgvMemberInfo.Rows(I).Cells("MemberName").Value))
            	'        	.Parameters.AddWithValue("@IDNumMem", CStr(dgvMemberInfo.Rows(I).Cells("IDNumMem").Value))
            	'        	.ExecuteNonQuery()
            	'    	End With
            	'	End Using
            	'Next
            	sqlTrans.Commit()
            	MsgBox("Data Saved")
            	'اذا نجحت اكد على كل العمليات التي قامت على البيانات
            	Return True
        	Catch ex As Exception
            	sqlTrans.Rollback()
            	MsgBox(ex.Message)
            	'واذا فشلت الغي العمليات التي قامت على البيانات       	
            	Return False
        	Finally
            	' DoCloseConn(Conn)
            	Conn.Close()
        	End Try
    	End Function

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#17

بارك الله فيك اخي houssam11350_11350

سأقوم بالتجريب

تزودوا فأن خيرا الزاد التقوى

اللهم انصر اخواننا المسلمين المجاهدين في كل مكان

#18

وأخيرا نجحت العملية اشكر كل من افادني في هذا الموضوع

فانا لازلت على بداية الخطوات في الدوت نت

اريد ان أخذ أرائكم في طريقتي لكتابة الكود هل هو كود احترافي ام انه لازال يريد المزيد من العمل وماهي الطريقة الاحترافية لكتابة الكود

تزودوا فأن خيرا الزاد التقوى

اللهم انصر اخواننا المسلمين المجاهدين في كل مكان

مواضيع مشابهة