我想要做的是在第一个表上插入数据,然后在第一个表上获取最后插入的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()
答案 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()