J'ai été invité à créer un programme qui insère des enregistrements dans une table parente et plusieurs tables enfants. Ma question est, comment puis-je savoir ce que le PK est pour la table parent, afin que je puisse l'ajouter comme un FK dans l'enfant? Le PK pour le parent est un numéro automatique. Comme je l'ai indiqué dans mon titre, j'utilise VB.net, mySQL, via une connexion ODBC. Je dois le faire à travers le code et ne peux pas utiliser les procédures stockées. Aucune suggestion?VB.net ajouter des enregistrements parent et enfant à MySQL db
grâce
ma transaction ressemble à ceci:
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
Je travaille toujours sur le code, donc je ne sais si cela fonctionne pour l'instant jason
Merci, je vais faire un essai! une autre question, si l'insertion de l'enfant échoue, je veux que toutes les insertions échouent. puis-je le faire dans une transaction? – jason
Oui, vous pouvez. C'est là que la bonté de la transaction entre vraiment en jeu. Sachez simplement que votre lot deviendra de plus en plus volumineux et complexe car vous voudrez également configurer ces insertions dans cette déclaration, mais c'est la bonne façon de le faire. –
Merci! vous n'auriez pas de code d'exemple pour faire une transaction avec select last_insert_idI()? Je n'ai pas travaillé avec des transactions sur vb.net auparavant. merci – jason