VB.net добавление родительских и дочерних записей в базу данных MySQL - PullRequest
2 голосов
/ 28 октября 2011

Меня попросили создать программу, которая вставляет записи в одну родительскую таблицу и несколько дочерних таблиц.У меня вопрос: откуда мне знать, что такое PK для родительской таблицы, чтобы я мог добавить его как FK для дочернего элемента?ПК для родителя - это автоматический номер.Как я уже говорил в своем заголовке, я использую VB.net, MySQL, через соединение ODBC.Я должен сделать это через код и не могу использовать хранимые процедуры.Любые предложения?

спасибо

моя транзакция выглядит так:

     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 ]

3 голосов
/ 28 октября 2011

Вы можете использовать

"; select last_insert_id()"

В конце вашей вставки для родительской таблицы. А затем используйте

Dim id as Integer = cint(command.ExecuteScalar())

Чтобы получить полученный ключ для использования в дочерних вставках

3 голосов
/ 28 октября 2011

Взгляните на Как получить уникальный идентификатор для последней вставленной строки

Поскольку вы проходите через ODBC и не можете использовать сохраненный процесс, вам придется выполнять два оператора SQL вместе ( как пакет ). Сначала ваш вкладыш, а затем SELECT LAST_INSERT_ID()

Это должно выглядеть примерно так:

INSERT INTO ... ;
SELECT LAST_INSERT_ID();

Поскольку вы ожидаете результата, вам необходимо выполнить из своего клиентского кода оператор SELECT. И поскольку это пакетная операция со вставкой, вам также следует рассмотреть с использованием транзакции .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...