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 TestTransaction
{
/// <summary>
/// 同一服务器数据事务性控制案例
/// </summary>
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection(@"Server = GAOLIJUN; DataBase = TEST ; UID = sa ; PWD = GAOLIJUN ");
conn.Open();
//提升为分布式事务
conn.EnlistTransaction(System.Transactions.Transaction.Current);
SqlTransaction st = conn.BeginTransaction();
try
{
string sql1 = "INSERT INTO TbUser (UserId, UserName ) VALUES ('01','gaolijun')";
string sql2 = "INSERT INTO TbUser (UserId, UserName ) VALUES ('02','gaoli')";
SqlCommand cmd = new SqlCommand(sql1, conn);
cmd.Transaction = st;
cmd.ExecuteNonQuery();
cmd = new SqlCommand(sql2, conn);
cmd.Transaction = st;
cmd.ExecuteNonQuery();
//改变当前数据库,以体现分布式事务的特性
conn.ChangeDatabase("TEST2");
OtherTransaction(st);
st.Commit();
}
catch (Exception ex)
{
st.Rollback();
}
}
private void OtherTransaction(SqlTransaction st)
{
string sql1 = "INSERT INTO TbUser (UserId, UserName ) VALUES ('01','gaolijun')";
string sql2 = "INSERT INTO TbUser (UserId, UserName ) VALUES ('01','gaoli')";
SqlCommand cmd = new SqlCommand(sql1, st.Connection);
cmd.Transaction = st;
cmd.ExecuteNonQuery();
cmd = new SqlCommand(sql2, st.Connection);
cmd.Transaction = st;
cmd.ExecuteNonQuery();
}
}
}