Transaction with ADO.NET – Quản lý phiên làm việc với ADO.NET


Transaction là một trong những thuật ngữ rất phổ biến đố với lập trình viên. Với SQLServer hay bấc kỳ một hệ quản trị csdl nào đều phải đảm bảo tính ACID, trong trường hợp thực thi hàng loạt các thao tác thay đổi đến csdl thì sẽ có những tình huống cần ràng buộc hoạt là tất cả hoàn thành hoạt là không tác vụ nào hoàn thành. Trong nội dung của bài này tôi giới thiệu với các bạn các thức cài đặc Transacton trên nền ADO.NET.

Transaction with ADO.NET
Transaction with ADO.NET

Tham khảo sources nguồn tại đây:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace Transaction
{
    public partial class Form1 : Form
    {
        SqlConnection conn;
        public Form1()
        {
            InitializeComponent();

            conn = new SqlConnection("Server=.;database=Northwind;uid=sa;pwd=sa;");
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (conn.State == ConnectionState.Closed)
                conn.Open();

            listBox1.Items.Insert(0, "Connected");
        }

        private void button2_Click(object sender, EventArgs e)
        {
            listBox1.Items.Insert(0, "Transaction started");
            SqlTransaction tran = conn.BeginTransaction("AddItems");

            SqlCommand comm = new SqlCommand("", conn);
            try
            {
                comm.Transaction = tran;

                string strSql = "";

                for (int i = 0; i < 10000; i++)
                {
                    strSql += "Insert into Items values(" + i + ",'Name" + i + "')";
                }

                comm.CommandText = strSql;

                int count = comm.ExecuteNonQuery();

                if (count < 10000)
                {
                    comm.Transaction.Rollback("AddItems");
                    listBox1.Items.Insert(0, "Transaction rollback");
                }
                else
                {
                    comm.Transaction.Commit();
                    listBox1.Items.Insert(0, "Transaction commit");
                }
            }
            catch
            {
                comm.Transaction.Rollback("AddItems");
                listBox1.Items.Insert(0, "Exception raise -> Transaction rollback");
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            SqlCommand comm = new SqlCommand("Delete items", conn);
            comm.ExecuteNonQuery();
        }
    }
}
Advertisements

Phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s