csharp中的事务处理
基本函数与模板
主要使用到SqlTransaction类的几个的函数
Save() // 保存点
Commit() // 提交
Rollback() // 回滚
- 开启事务之后,必须要提交,否则数据库数据不会被更新
- 开启事务后,若过程中sql执行失败,虽然不用Roolback()也会自动回滚,但最好还是写上。
基本模板,使用using来自动释放资源。
using (SqlConnection con = new SqlConnectin(conStr))
{
using(SqlCommand cmd = new SqlCommand())
{
con.Open();
cmd.Connection=con;
SqlTransaction tran = con.BeginTransaction(); // 创建事务
cmd.Transaction = tran;
cmd.CommandText = "要执行的SQL语句";
try
{
cmd.ExecuteNonQuery();
Console.WriteLine("执行成功!");
tran.Commit(); // 成功则提交事务
}
catch(SqlException sqlEx)
{
Console.WriteLine("执行失败:{0}",sqlEx.Message);
tran.Rollback(); // 失败则回滚
}
}
}
示例
执行成功并且用Commit()方法提交。
using System;
using System.Data.SqlClient;
public class H7
{
public static void Main(string[] args)
{
string conStr = "server=LXY;database=StudySql;integrated security=true;";
string sql1 = "update Contacts set contactPhone='666' where contactId=1";
string sql2 = "update Contacts set contactPhone='666' where contactId=2";
string sql3 = "update Contacts set contactPhone='666' where contactId=3";
string sql4 = "update Contacts set contactPhone='666' where contactId=4";
using (SqlConnection con = new SqlConnection(conStr))
{
using(SqlCommand cmd = new SqlCommand(sql1,con))
{
con.Open();
SqlTransaction tran = con.BeginTransaction();
cmd.Transaction = tran;
try
{
cmd.ExecuteNonQuery();
cmd.CommandText = sql2;
cmd.ExecuteNonQuery();
cmd.CommandText = sql3;
cmd.ExecuteNonQuery();
cmd.CommandText = sql4;
cmd.ExecuteNonQuery();
tran.Commit();
Console.WriteLine("执行成功了,也提交了");
}
catch(SqlException sqlEX)
{
Console.WriteLine("执行失败了用 tran.Rollback 回滚");
Console.WriteLine("执行失败:{0}",sqlEX.Message);
tran.Rollback();
}
}
}
}
}