sql事务和vb.net中的双表插入

时间:2013-11-25 03:30:13

标签: sql-server vb.net transactions

我想要做的是在第一个表上插入数据,然后在第一个表上获取最后插入的ID并将其插入第二个表。我已经得到了这个没有事务,但我不能这样做,因为我需要稍后进行交易,因为我将一次性添加大量插入。

到目前为止这是我的代码..
请注意,这是在交易中..

                command.CommandText = "INSERT INTO tblCarMaintenance " & _
                      "(ID_Car, fDate, fMechanic, fOverseer, fDescription, fDateNext, fAmount) " & _
                      "VALUES (@myCarID, @myDate, @myMechanic, @myOverseer, @myDescription, @myDateNext, @myAmount)"
                command.Parameters.Add("@myCarID", SqlDbType.Int).Value = pCarID
                command.Parameters.Add("@myDate", SqlDbType.DateTime).Value = myDate
                command.Parameters.Add("@myMechanic", SqlDbType.VarChar).Value = pMechanic
                command.Parameters.Add("@myOverseer", SqlDbType.VarChar).Value = pOverseer
                command.Parameters.Add("@myDescription", SqlDbType.VarChar).Value = pDescription
                command.Parameters.Add("@myDateNext", SqlDbType.DateTime).Value = pNext
                command.Parameters.Add("@myAmount", SqlDbType.Float).Value = pAmount
                command.ExecuteNonQuery()

               'insert records on the second table (the problem is here)

                command.CommandText = "INSERT INTO tblCarMaintenance2 " & _
                      "(ID_Main, ID_Supplier, fParts, fAmount) " & _
                      "VALUES (@myMainID, @mySupplierID, @myParts, @myAmount) " & _
                      "FROM tblCarMaintenance"
                command.Parameters.Add("@myMainID", SqlDbType.Int).Value = myID
                command.Parameters.Add("@mySupplierID", SqlDbType.DateTime).Value = myDate
                command.Parameters.Add("@myParts", SqlDbType.VarChar).Value = pMechanic
                command.Parameters.Add("@myAmount", SqlDbType.VarChar).Value = pOverseer
                command.ExecuteNonQuery()

 transaction.Commit()

编辑: @myMainID是等于tblCarMaintenance上最后插入ID的参数

修改
解决问题的方法是:

command.CommandText = "INSERT INTO tblCarMaintenance " & _
                  "(ID_Car, fDate, fMechanic, fOverseer, fDescription, fDateNext, fAmount) " & _
                  "VALUES (@myCarID, @myDate, @myMechanic, @myOverseer, @myDescription, @myDateNext, @myAmount)" & _
                  "Select SCOPE_IDENTITY()"

                command.Parameters.Add("@myCarID", SqlDbType.Int).Value = pCarID
                command.Parameters.Add("@myDate", SqlDbType.DateTime).Value = myDate
                command.Parameters.Add("@myMechanic", SqlDbType.VarChar).Value = pMechanic
                command.Parameters.Add("@myOverseer", SqlDbType.VarChar).Value = pOverseer
                command.Parameters.Add("@myDescription", SqlDbType.VarChar).Value = pDescription
                command.Parameters.Add("@myDateNext", SqlDbType.DateTime).Value = pNext
                command.Parameters.Add("@myAmount", SqlDbType.Float).Value = pAmount
                Dim InsertedItemID = command.ExecuteScalar()

                command.CommandText = "INSERT INTO tblCarMaintenance2 " & _
                      "(ID_Main, ID_Supplier, fParts, fAmount) " & _
                      "VALUES (" & InsertedItemID & ", @mySupplierID, @myParts, @myAmount2) "

                command.Parameters.Add("@mySupplierID", SqlDbType.Int).Value = pSupplier
                command.Parameters.Add("@myParts", SqlDbType.VarChar).Value = pParts
                command.Parameters.Add("@myAmount2", SqlDbType.Float).Value = 12
                command.ExecuteNonQuery()

1 个答案:

答案 0 :(得分:1)

在第一次查询中,请修改为:

command.CommandText = "INSERT INTO tblCarMaintenance " & _
                      "(ID_Car, fDate, fMechanic, fOverseer, fDescription, fDateNext, fAmount) " & _
                      "VALUES (@myCarID, @myDate, @myMechanic, @myOverseer, @myDescription, @myDateNext, @myAmount)" & _
                      "Select SCOPE_IDENTITY()";

并将第一个command.ExecuteNonQuery()更改为:

Dim InsertedItemID = command.ExecuteScalar()