常用SQL语句总结(3)

获取自增主键Id并实现事务

  • 表A为用户信息表,表B为日志表,每当A插入一条信息时B都要插入一条日志,在写日志的时候需要把刚刚插入A表的那条数据的自增主键Id也写到日志中,以识别该日志对应A表哪条信息。
  • 重点来了,要想把刚刚插入A表的那条数据的自增主键Id写到B表中,首先要获取这条数据的自增主键Id。
  • 由于向A、B中插入数据具有关联性,必须都插入或都不插入,如果有一项插入失败就会造成数据缺失,为避免部分Sql执行失败的情况发生,可以使用事务来处理,把向A、B中插入数据作为一个整体,如果在这个整体执行过程中有Sql语句执行失败的情况则回滚到Sql执行之前的状态,这样就避免了数据缺失是情况,同时也不会对原数据造成影响。
protected void btnIdentityId_Click(object sender, EventArgs e)
{
    List<string> sqlCommandList = new List<string>();
    StringBuilder sqlStringBuilder = new StringBuilder();
    sqlStringBuilder.AppendFormat("insert into UserInfo values('2016001','蝈蝈',getdate(),'男')");
    //获取刚插入到UserInfo表的那条信息的自增Id
    sqlStringBuilder.AppendFormat("declare {0} int;set {1}=SCOPE_IDENTITY();", "@UserIdentityId", "@UserIdentityId");
    //通过变量名使用刚插入到UserInfo表的那条信息的自增Id
    sqlStringBuilder.AppendFormat("insert into Descriptions values({0},{1},getdate())", "@UserIdentityId", "获取自增Id添加描述");
    sqlCommandList.Add(sqlStringBuilder.ToString());
    ExecuteSqlTran(sqlCommandList);
}
/// <summary>
/// 执行多条SQL语句,实现数据库事务。
/// </summary>
/// <param name="SQLStringList">多条SQL语句</param>     
public static int ExecuteSqlTran(List<String> SQLStringList)
{
    using (SqlConnection conn = new SqlConnection(connectionString))
    {
        conn.Open();
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = conn;
        SqlTransaction tx = conn.BeginTransaction();
        cmd.Transaction = tx;
        try
        {
            int count = 0;
            for (int n = 0; n < SQLStringList.Count; n++)
            {
                string strsql = SQLStringList[n];
                if (strsql.Trim().Length > 1)
                {
                    cmd.CommandText = strsql;
                    count += cmd.ExecuteNonQuery();
                }
            }
            tx.Commit();
            return count;
        }
        catch
        {
            tx.Rollback();
            return 0;
        }
    }
}
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

changuncle

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值