我被要求创建一个程序,将记录插入一个父表和多个子表。我的问题是,我如何知道父表的PK是什么,以便我可以将它作为FK添加到子表中?父母的PK是一个自动编号。正如我在标题中所述,我通过ODBC连接使用VB.net,mySQL。我必须通过代码执行此操作,并且不能使用存储过程。有什么建议吗?
感谢
我的交易看起来像这样:
Dim cmdText As String = "INSERT INTO candidate(first_name, last_name, phone1, phone2, email1, city, " _
& " state, country, zip,primary_contact_id ) VALUES (?,?, ?, ?,?,?, ?,?,?,?)"
If conn.State = ConnectionState.Closed Then
conn.Open()
End If
Dim SqlStatus As Integer
Dim trans As Odbc.OdbcTransaction = conn.BeginTransaction(IsolationLevel.ReadCommitted)
Dim cmd As OdbcCommand = New OdbcCommand(cmdText, conn, trans)
Try
cmd.Parameters.Clear()
cmd.CommandType = CommandType.Text 'The default is CommandType.Text
With cmd.Parameters
.Add("@first_name", OdbcType.VarChar).Value = fName
.Add("@last_name", OdbcType.VarChar).Value = lName
.Add("@phone1", OdbcType.VarChar).Value = phone
.Add("@phone2", OdbcType.VarChar).Value = mobilePhone
.Add("@email1", OdbcType.VarChar).Value = email
.Add("@city", OdbcType.VarChar).Value = city
.Add("@state", OdbcType.VarChar).Value = state
.Add("@country", OdbcType.VarChar).Value = country
.Add("@zip", OdbcType.VarChar).Value = zip
.Add("@primary_contact_id", OdbcType.Int).Value = getContactFK
End With
SqlStatus = cmd.ExecuteNonQuery
If Not SqlStatus = 0 Then
trans.Commit()
Me.Close()
Else
MsgBox("Not Updated")
End If
Catch ex As Exception
MsgBox(ex.Message)
Finally
cmd.Dispose()
trans.Dispose()
End Try
我还在处理代码,所以不确定它是否正常工作 杰森
答案 0 :(得分:3)
查看How to Get the Unique ID for the Last Inserted Row
由于您正在使用ODBC并且无法使用存储过程,因此您必须同时执行两个SQL语句(as a batch)。首先是您的插入,然后是SELECT LAST_INSERT_ID()
它应该类似于:
INSERT INTO ... ;
SELECT LAST_INSERT_ID();
由于您期望得到结果,因此需要从客户端代码中执行SELECT语句。由于这是一个带插入的批处理操作,您还应该考虑using a transaction。
答案 1 :(得分:3)
您可以使用
"; select last_insert_id()"
在父表的插入结束时。然后使用
Dim id as Integer = cint(command.ExecuteScalar())
获取在子插入中使用的结果键