Friday, July 6, 2012

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.

[caption id="attachment_668" align="aligncenter" width="300"]Transaction with ADO.NET Transaction with ADO.NET[/caption]

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

[sourcecode language="CSharp" wraplines="false"]
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();
}
}
}
[/sourcecode]

No comments:

Post a Comment

Translate