以前我更新数据库中一条记录的时候,先查出对应的数据处理后再更新,比如给一个用户加分Query()
{
select score frome user
update(score + 1);
}
update(score)
{
update user set score = score
}
//竟没想到可以这样
update user set score = score + 1
然后我又想到了以前已经习惯用的多次数据库操作,比如在一个表里插入一条数据,同时要更新另一个表里的数据insert()
{
insert into table1(a) Values(1)
update();
}
update()
{
update table2 set c = 2
}
//当然,这样做可能会有第一条数据插入成功,但第条数据没更新成功的可能,但是这样只建一次连接,执行两条语句,效率是不是可以高点,但不知高了多少我的问题出来了,这样做各有什么利弊呢

解决方案 »

  1.   

    SQL中有种技术叫作事务……建议LZ使用……
      

  2.   

    用Sql事务,好处是要么成功:两个操作都实现;要么失败:两个操作都未实现;不会出现两个操作只执行了一个的情况.
      

  3.   

    我写错了,现更正如下codeinsert()
    {
    insert into table1(a) Values(1)
    update();
    update()
    {
    update table2 set c = 2
    }
    //想到可以这样做
    codeinsert()
    {
    string strSql = "insert into table1(a) Values(1);update table2 set c = 2;"
    }
    //不知有没有说明白我想说的,呵呵//当然,这样做可能会有第一条数据插入成功,但第条数据没更新成功的可能,但是这样只建一次连接,执行两条语句,效率是不是可以高点,但不知高了多少
      

  4.   

    存储过程 事务
    or
    触发器
    or
    接分
      

  5.   

    提交多条就用事务了,例子:protected void Button1_Click(object sender, EventArgs e)
        {
            OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0;Data Source=C:/Inetpub/wwwroot/DotNetArticle/App_Data/DotNetArticle.mdb");
            con.Open(); 
            OleDbCommand cmd = new OleDbCommand();
            cmd.Connection = con;
            cmd.Transaction = con.BeginTransaction();
            try
            {
                string sql1 = "insert into teaminfo (num,username,isplay) values(1,'a',1)";
                string sql2 = "insert into teaminfo (num,username,isplay) values(2,'b',1)";
                string sql3 = "insert into teaminfo (num,username,isplay) values(3,'c',1)";
                string[] SQLStringList = { sql1, sql2, sql3 };
                for (int n = 0; n < SQLStringList.Length; n++)
                {
                    string strsql = SQLStringList[n].ToString();
                    if (strsql.Trim().Length > 1)
                    {
                        cmd.CommandText = strsql;
                        cmd.ExecuteNonQuery();
                    }
                }         
                cmd.Transaction.Commit();  //提交事务            
            }
            catch (Exception)
            {
                cmd.Transaction.Rollback();
            }
            finally
            {
                con.Close();
            }
        }
      

  6.   

    update用事务就没有啥问题,出错全部回滚
      

  7.   

    也可以
    string sql = "insert into teaminfo (num,username,isplay) values(1,'a',1);insert into teaminfo (num,username,isplay) values(2,'b',1);insert into teaminfo (num,username,isplay) values(3,'c',1)"
    一次插入多条数据
      

  8.   

    insert()
    {
    insert into table1(a) Values(1)
    update();
    }
    update()
    {
    update table2 set c = 2
    }
    建议楼主用事务,要不然看上面的那个inert语句执行成功,下面开始执行的update语句要是失败的话,你上面插入的数据就是没有用的数据
      

  9.   

    对不住大家了,CSDN不让加分了,最多只是100分
    结贴,祝大家周末愉快