Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,036

HOME > .NET Framework > Forum > อยากทราบวิธีการใช้ transactionscope ใน C# หน่อยครับ



 

อยากทราบวิธีการใช้ transactionscope ใน C# หน่อยครับ

 



Topic : 083863



โพสกระทู้ ( 32 )
บทความ ( 0 )



สถานะออฟไลน์




อยากทราบวิธีการใช้ transactionscope กรณีที่เราต้องการ เพิ่ม ลบ แก้ไขข้อมูลทีละหลายๆ table



Tag : .NET, C#







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2012-09-12 13:15:56 By : JaNoRn View : 3406 Reply : 7
 

 

No. 1



โพสกระทู้ ( 19 )
บทความ ( 0 )



สถานะออฟไลน์


ถามพี่ goo เยอะๆ
http://msmvps.com/blogs/williamryan/archive/2004/07/08/9759.aspx






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-09-12 15:29:18 By : chokbunthit
 


 

No. 2



โพสกระทู้ ( 74,058 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

เผื่อจะมีประโยชน์ครับ

Go to : (C#) ASP.NET - Transaction()
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-09-12 15:49:34 By : mr.win
 

 

No. 3



โพสกระทู้ ( 32 )
บทความ ( 0 )



สถานะออฟไลน์


ขอบคุณสำหรับคำแนะนำครับ

แต่วัตถุประสงค์จริงๆแล้วคือ การเพิ่ม แก้ไขข้อมูล หลายๆเทเบิลในเวลาเดียวกัน โดยการตรวจสอบสอบก่อนว่าคำสั่งในการเพิ่ม ลบ แก้ไขข้อมูลมีการ error ไหม ถ้าไม่มีการ error ให้บันทึกข้อมูลได้ แต่ถ้ามีการ error ไม่ให้้มีการบันทึก

เช่น ผมต้องการเพิ่มข้อมูล 3 table แต่ละ table มีการเชื่อมโยงกัน

table1 และ table2 ไม่มีการ error สามารถบันทึกข้อมูลได้ตามลำดับ แต่ตอนเพิ่มข้อมูลใน table ที่ 3 เกิดการ error ของข้อมูลทำให้มีข้อมูลใน table ที่ 1และ2 แต่ข้อมูลใน table ที่ 3 ไม่มี ผมต้องมานั่งลบข้อมูลใน table 1และ 2 ทำให้เสียเวลา

ผมอยากให้มีการตรวจสอบก่อนว่ามีการ error ของข้อมูลในการเพิ่มข้อมูลหรือไม่ ถ้าไม่มีการ error ให้บันทึกข้อมูลได้ แต่ถ้ามีการ error ไม่ให้้มีการบันทึก ทั้ง 3 table

ตัวอย่าง code

Code (C#)
private void insertInto()
        {
            
            string sql = "insert into customer (customer_id,customer_name) values(@customer_id, @customer_name)";
            SqlTransaction ts = conn.BeginTransaction();
            cmd = new SqlCommand(sql,conn);
            cmd.Parameters.Clear();
            cmd.Parameters.AddWithValue("@customer_id",txtCus_id.Text.Trim());
            cmd.Parameters.AddWithValue("@customer_name", txtCus_name.Text.Trim());
            cmd.Transaction = ts;
            int rowaffected = 0;
            rowaffected = cmd.ExecuteNonQuery();
            if (rowaffected > 0)
            {
                ts.Commit();
                string sql_sale = "insert into sale (sale_id,sale_number,date,customer_id) values(@sale_id,@sale_number,@date,@customer_id)";
                ts = conn.BeginTransaction();
                cmd = new SqlCommand(sql_sale,conn);
                cmd.Parameters.AddWithValue("@sale_id", txtSale_id.Text.Trim());
                cmd.Parameters.AddWithValue("@sale_number", txtSale_number.Text.Trim());
                cmd.Parameters.AddWithValue("@date", Convert.ToDateTime(dateTimePicker1.Value.ToShortDateString()));
                cmd.Parameters.AddWithValue("@customer_id", txtCus_id.Text.Trim());
                cmd.Transaction = ts;
                int rowaffected1 = 0;
                rowaffected1 = cmd.ExecuteNonQuery();
                if (rowaffected1 > 0)
                {
                    ts.Commit();
                    string sql_detail = "insert into detail(detail_id,product_name) values(@detail_id,@product_name)";
                    ts = conn.BeginTransaction();
                    cmd = new SqlCommand(sql_detail,conn);
                    cmd.Parameters.Clear();
                    cmd.Parameters.AddWithValue("@detail_id", txtSale_id.Text.Trim());
                    cmd.Parameters.AddWithValue("@product_name", txtProduct_name.Text.Trim());
                    cmd.Transaction = ts;
                    int rowaffected2 = 0;
                    rowaffected2 = cmd.ExecuteNonQuery();
                    if (rowaffected2 > 0)
                    {
                        ts.Commit();
                    }
                    else {
                        ts.Rollback();
                    }                      
                }
                else {
                    ts.Rollback();
                    
                }
            }
            else {
                ts.Rollback();
            }
            queryDB();
        }

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-09-12 16:26:30 By : JaNoRn
 


 

No. 4



โพสกระทู้ ( 32 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 1 เขียนโดย : chokbunthit เมื่อวันที่ 2012-09-12 15:29:18
รายละเอียดของการตอบ ::
ขอบคุณครับ

ผมใช้ visual studio 2008 เรียกใช้คลาส System.Transaction มันไม่มีอ่ะครับ (Transactionscope เป็นเมธอตใน Transaction)
ขอคำแนะนำด้วยครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-09-12 16:32:09 By : JaNoRn
 


 

No. 5



โพสกระทู้ ( 19 )
บทความ ( 0 )



สถานะออฟไลน์


อืมจากที่ดู Code แล้วรู้สึกว่าจะผิดตรง
ts.Commit();
ที่มีการเรียกใช้หลายๆจุด เพราะอะไรรู้ไหม เทเบิล 1 ไม่มี Error แต่ เทเบิล 3 Error แต่ยังมีข้อมูลเข้าเทเบิล 1 ได้อยู่ก็เนื่องจาก Transaction ถูก Commit ไปแล้ว ถ้าอย่างไงให้ไปดูตัวอย่างของคุณ mr.win ศึกษาเพิ่มเติมดูครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-09-12 17:17:59 By : chokbunthit
 


 

No. 6



โพสกระทู้ ( 19 )
บทความ ( 0 )



สถานะออฟไลน์


ตัวอย่างอีกอันครับ
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqltransaction.aspx
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-09-12 17:20:03 By : chokbunthit
 


 

No. 7



โพสกระทู้ ( 32 )
บทความ ( 0 )



สถานะออฟไลน์


ได้แล้วครับ ขอบคุณสำหรับคำแนะนำทุกๆท่านครับ

โค๊ดตัวอย่างเผื่อท่านใดจะนำไปปรับเปลี่ยนใช้เอง
Code (C#)
private void insertInto()
        {
            ts = conn.BeginTransaction(IsolationLevel.ReadCommitted);
            try
            {
                string sql = "insert into customer (customer_id,customer_name) values(@customer_id, @customer_name)";
                cmd = new SqlCommand(sql, conn);
                cmd.Parameters.Clear();
                cmd.Parameters.AddWithValue("@customer_id", txtCus_id.Text);
                if (txtProduct_name.Text != "")
                {
                    cmd.Parameters.AddWithValue("@customer_name", txtCus_name.Text);
                }
                cmd.Transaction = ts;
                cmd.ExecuteNonQuery();
                //MessageBox.Show("cus");

                string sql_sale = "insert into sale (sale_id,sale_number,date,customer_id) values(@sale_id,@sale_number,@date,@customer_id)";
                cmd = new SqlCommand(sql_sale, conn);
                cmd.Parameters.AddWithValue("@sale_id", id);
                if (txtSale_number.Text != "")
                {
                    cmd.Parameters.AddWithValue("@sale_number", txtSale_number.Text);
                }
                cmd.Parameters.AddWithValue("@date", Convert.ToDateTime(dateTimePicker1.Value.ToShortDateString()));
                if (txtCus_id.Text != "")
                {
                    cmd.Parameters.AddWithValue("@customer_id", txtCus_id.Text);
                }
                cmd.Transaction = ts;
                cmd.ExecuteNonQuery();
                //MessageBox.Show("sale");
                string sql_detail = "insert into detail(detail_id,product_name) values(@detail_id,@product_name)";
                cmd = new SqlCommand(sql_detail, conn);
                cmd.Parameters.Clear();
                cmd.Parameters.AddWithValue("@detail_id", id);
                if (txtProduct_name.Text != "")
                {
                    cmd.Parameters.AddWithValue("@product_name", txtProduct_name.Text);
                }
                cmd.Transaction = ts;
                cmd.ExecuteNonQuery();
                //MessageBox.Show("detail");

                for (int i = 0; i < dataGridView1.RowCount - 1; i++)
                {
                    string sql_1 = "insert into invoice(invoice_id,customer_id,customer_name,sale_id,sale_number,date)";
                    sql_1 += " values(@invoice_id,@customer_id,@customer_name,@sale_id,@sale_number,@date)";
                    cmd = new SqlCommand(sql_1, conn);
                    cmd.Parameters.Clear();
                    cmd.Parameters.AddWithValue("@invoice_id", dataGridView1.Rows[i].Cells[2].Value.ToString());
                    cmd.Parameters.AddWithValue("@customer_id", dataGridView1.Rows[i].Cells[0].Value.ToString());
                    cmd.Parameters.AddWithValue("@customer_name", dataGridView1.Rows[i].Cells[1].Value.ToString());
                    cmd.Parameters.AddWithValue("@sale_id", dataGridView1.Rows[i].Cells[2].Value.ToString());
                    cmd.Parameters.AddWithValue("@sale_number", dataGridView1.Rows[i].Cells[3].Value.ToString());
                    cmd.Parameters.AddWithValue("@date", Convert.ToDateTime(dataGridView1.Rows[i].Cells[4].Value.ToString()));
                    cmd.Transaction = ts;
                    cmd.ExecuteNonQuery();
                 }
                 ts.Commit();
                 queryDB();
            }
            catch {
                ts.Rollback();
                MessageBox.Show("ไม่สามารถบันทึกข้อมูลได้");
            }
        }

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-09-13 17:25:43 By : JaNoRn
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : อยากทราบวิธีการใช้ transactionscope ใน C# หน่อยครับ
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 05
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่