您现在的位置是:首页 > .NET

.NET

在.net中实现事务(SqlTransaction)示例

2020-11-19 09:44:51 .NET admin
如果我们需要一次性往数据库的多个表中添加数据,要么全部成功,要么全部失败。这种功能在sqlserver中我们可以利用事务(Transaction)轻松实现,在.net中则提供了SqlTransaction类来实现同样功能。SqlTransa
如果我们需要一次性往数据库的多个表中添加数据,要么全部成功,要么全部失败。这种功能在sqlserver中我们可以利用事务(Transaction)轻松实现,在.net中则提供了SqlTransaction类来实现同样功能。

SqlTransaction:表示要在SQLServer数据库中处理的Transact-SQL事务

使用示例如下:
/*
*开启一个事务,执行list中所有的sql语句,并将第一条sql语句的返回值作为后续sql语句中最
后一个参数的值。
*/
publicstaticvoidExecuteDictionary(List<DictionaryEntry>lists)
{
using(SqlConnectionconnection=Conn())
{
//判断该连接是否打开,如果未打开,则打开该连接
if(connection.State==ConnectionState.Closed)
{
connection.Open();
}

//从该连接创建一个事务
SqlTransactiontrans=connection.BeginTransaction();
SqlCommandcmd=newSqlCommand();
cmd.Connection=connection;
cmd.CommandType=CommandType.Text;

//设置该Command将在事务trans中执行
cmd.Transaction=trans;

try
{
SqlParameter[]sqlparameters;
intidentity=0;

for(inti=0;i<lists.Count;i++)
{
cmd.CommandText=lists[i].Key.ToString();
sqlparameters=(SqlParameter[])lists[i].Value;

foreach(SqlParameterparainsqlparameters)
{
cmd.Parameters.Add(para);
}

if(i==0)
{
identity=(int)cmd.ExecuteScalar();
}
else
{
//将第一条sql的返回值作为后续的sql最后一个参数的值
cmd.Parameters[cmd.Parameters.Count-1].Value=identity;
cmd.ExecuteNonQuery();
}
cmd.Parameters.Clear();
}

//提交该事务
trans.Commit();
}
catch(Exceptionex)
{
//如果在执行过程中发生错误,则回滚该事务
trans.Rollback();
throwex;
}
}
}