以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  主从表事务 获取主表id  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=171280)

--  作者:hgy
--  发布时间:2021/8/25 10:23:00
--  主从表事务 获取主表id
要得到主表的id 存入从表
cmd.BeginTransaction()      
dim _id as integer 
for i=1 to 20    
cmd.CommandText = "insert into [tb_test] (p_id,c_date) values (?,?);select SCOPE_IDENTITY() as id"
            
            cmd.Parameters.Add("@p_id",_platid)
            cmd.Parameters.Add("@c_date",Date.Today)
            _id =   cmd.ExecuteScalar()
next 
cmd.commit()

数据库死锁,显示查询已超时,是否哪里出现问题

--  作者:有点蓝
--  发布时间:2021/8/25 10:36:00
--  
完整代码?
--  作者:hgy
--  发布时间:2021/8/25 10:40:00
--  
Try
    cmd.BeginTransaction()
    Dim _id As Integer
    For i=1 To 20
        
        cmd.Parameters.Clear()
        cmd.CommandText = "insert into [tb_test] (p_id,c_date) values (?,?);select SCOPE_IDENTITY() as id"
        
        cmd.Parameters.Add("@p_id",_platid)
        cmd.Parameters.Add("@c_date",Date.Today)
        _id =   cmd.ExecuteScalar()
        
        cmd.Parameters.Clear()
        cmd.CommandText = "insert into [tb_test_detail] (p_id,test_id) values (?,?)"
        
        cmd.Parameters.Add("@p_id",_platid)
        cmd.Parameters.Add("@test_id",_id) \' 主表id
        cmd.ExecuteNonQuery()
    Next
    cmd.commit()
    
Catch ex As Exception
    cmd.Rollback()
    MessageBox.Show(ex.Message)
End Try

--  作者:有点蓝
--  发布时间:2021/8/25 10:54:00
--  
把事务放到循环里

Try

    Dim _id As Integer
    For i=1 To 20
         cmd.BeginTransaction()   
        cmd.Parameters.Clear()
        cmd.CommandText = "insert into [tb_test] (p_id,c_date) values (?,?);select SCOPE_IDENTITY() as id"
        
        cmd.Parameters.Add("@p_id",_platid)
        cmd.Parameters.Add("@c_date",Date.Today)
        _id =   cmd.ExecuteScalar()
        
        cmd.Parameters.Clear()
        cmd.CommandText = "insert into [tb_test_detail] (p_id,test_id) values (?,?)"
        
        cmd.Parameters.Add("@p_id",_platid)
        cmd.Parameters.Add("@test_id",_id) \' 主表id
        cmd.ExecuteNonQuery()
cmd.commit()
    Next
    
    
Catch ex As Exception
    cmd.Rollback()
    MessageBox.Show(ex.Message)
End Try