VB.net将父记录和子记录添加到MySQL db

时间:2011-10-28 15:57:23

标签: mysql vb.net odbc vb.net-2010

我被要求创建一个程序,将记录插入一个父表和多个子表。我的问题是,我如何知道父表的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

我还在处理代码,所以不确定它是否正常工作 杰森

2 个答案:

答案 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())

获取在子插入中使用的结果键