如果我们需要一次性往数据库的多个表中添加数据,要么全部成功,要么全部失败。这种功能在
sql server中我们可以利用事务(Transaction)轻松实现,在.net中则提供了SqlTransaction类来实现同样功能。
SqlTransaction:表示要在 SQL Server 数据库中处理的Transact-SQL事务
使用示例如下:
/*
* 开启一个事务,执行list中所有的sql语句,并将第一条sql语句的返回值作为后续sql语句中最
后一个参数的值。
*/
public static void ExecuteDictionary(List<DictionaryEntry > lists)
{
using (SqlConnection connection = Conn())
{
//判断该连接是否打开,如果未打开,则打开该连接
if (connection.State == ConnectionState.Closed)
{
connection.Open();
}
//从该连接创建一个事务
SqlTransaction trans = connection.BeginTransaction();
SqlCommand cmd = new SqlCommand();
cmd.Connection = connection;
cmd.CommandType = CommandType.Text;
//设置该Command将在事务trans中执行
cmd.Transaction = trans;
try
{
SqlParameter[] sqlparameters;
int identity=0;
for (int i = 0; i < lists.Count; i++)
{
cmd.CommandText = lists[i].Key.ToString();
sqlparameters = (SqlParameter[])lists[i].Value;
foreach (SqlParameter para in sqlparameters)
{
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 (Exception ex)
{
//如果在执行过程中发生错误,则回滚该事务
trans.Rollback();
throw ex;
}
}
}
该例简单的演示了在.net中使用SqlTransaction的例子,希望能给大家带来帮助。