欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 » ASP.Net » 正文

热门阅读

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

创建时间:2012年01月31日 12:50  阅读次数:(10359)
分享到:
如果我们需要一次性往数据库的多个表中添加数据,要么全部成功,要么全部失败。这种功能在 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的例子,希望能给大家带来帮助。
来源:.net学习网
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论0条
  • 暂无任何评论,请留下您对本文章的看法,共同参入讨论!
发表评论:
留言人:
内  容:
请输入问题 18+74=? 的结果(结果是:92)
结  果: