none
Retornando id ultimo registro MySQL RRS feed

  • Pergunta

  • É a primeira vez que trabalho com MySQL.

    Preciso retornar o ID do último registro inserido. Está dando o seguinte erro: "Fatal error encountered during command execution"

        Public Function inserePeriodo(strConexao As String, idUni As Integer, dataI As String, dataF As String) As Integer
            Dim conn As New MySqlConnection
            conn.ConnectionString = strConexao
    
            Dim strSQL As String = "INSERT INTO VisitaUnidade (idUnidade, dataInicial, dataFinal ) VALUES (@idUnidade, @dataInicial, @dataFinal);" _
                                    & " SELECT LAST_INSERT_ID() INTO @ID;"
    
            Dim cmd As New MySqlCommand(strSQL, conn)
            Dim i As Integer
    
            Try
                With cmd.Parameters
                    .Add(New MySqlParameter("@idUnidade", idUni))
                    .Add(New MySqlParameter("@dataInicial", dataI))
                    .Add(New MySqlParameter("@dataFinal", dataF))
                End With
                conn.Open()
                i = Convert.ToInt32(cmd.ExecuteScalar)
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            Finally
                conn.Close()
            End Try
    
            Return i
    
        End Function
    Nota: Na tabela, os campos dataInicial e dataFinal são do tipo DateTime


    Sergio Ivanenko




    • Editado Ivanenko quinta-feira, 31 de dezembro de 2015 19:27
    quinta-feira, 31 de dezembro de 2015 18:54

Respostas

  • Normalmente com banco de dados o formato (quase) sempre vai ser "yyyy-MM-dd HH:mm".

    Tente e nos informe o resultado.


    Att., Rafael Simor

    • Marcado como Resposta Ivanenko sábado, 2 de janeiro de 2016 01:42
    sexta-feira, 1 de janeiro de 2016 22:49

Todas as Respostas

  • Boa noite Ivanenko

    tenta desta forma!

    select last_insert_id();
    
    int id = Convert.ToInt32(comm.ExecuteScalar());

    Estou sem Mysql para testar, se não de certo avisa que instalo aqui!

    Att.


    Daniel Ribeiro Arrais
    Consultor Sênior
    www.scrumbrasil.com.br

    • Sugerido como Resposta Daniel R. Arrais sexta-feira, 1 de janeiro de 2016 14:31
    quinta-feira, 31 de dezembro de 2015 23:07
  • Funcionar funcionou, só que as datas não foram incluídas.

    Sergio Ivanenko

    sexta-feira, 1 de janeiro de 2016 16:24
  • Boa tarde.

    Tu estás fazendo dessa forma?

    Dim strSQL As String = "INSERT INTO VisitaUnidade (idUnidade, dataInicial, dataFinal ) VALUES (@idUnidade, @dataInicial, @dataFinal); SELECT LAST_INSERT_ID();"


    Att., Rafael Simor

    sexta-feira, 1 de janeiro de 2016 21:44
  • Sim.

    A unica alteração foi no Select para retorno do ID do registro, ficou como sugerido.

     Dim strSQL As String = "INSERT INTO VisitaUnidade (idUnidade, dataInicial, dataFinal ) VALUES (@idUnidade, @dataInicial, @dataFinal);" _
                                    & " SELECT LAST_INSERT_ID();"
    A minha dúvida é quanto ao formato das datas, na tabela ela são do tipo DateTime e estou informando uma string.


    Sergio Ivanenko

    sexta-feira, 1 de janeiro de 2016 22:41
  • Normalmente com banco de dados o formato (quase) sempre vai ser "yyyy-MM-dd HH:mm".

    Tente e nos informe o resultado.


    Att., Rafael Simor

    • Marcado como Resposta Ivanenko sábado, 2 de janeiro de 2016 01:42
    sexta-feira, 1 de janeiro de 2016 22:49
  • Rafael.

    Obrigado. Funcionou sem problemas, ficou assim:

        Public Function inserePeriodo(strConexao As String, idUni As Integer, dataI As String, dataF As String) As Integer
            Dim conn As New MySqlConnection
            Dim dtI As Date = DateTime.Parse(dataI, Nothing)
            Dim dtF As Date = DateTime.Parse(dataF, Nothing)
    
            conn.ConnectionString = strConexao
    
            Dim strSQL As String = "INSERT INTO VisitaUnidade (idUnidade, dataInicial, dataFinal ) VALUES (@idUnidade, @dataInicial, @dataFinal);" _
                                    & " SELECT LAST_INSERT_ID();"
    
            Dim cmd As New MySqlCommand(strSQL, conn)
            Dim i As Integer
    
            Try
                With cmd.Parameters
                    .Add(New MySqlParameter("@idUnidade", idUni))
                    .Add(New MySqlParameter("@dataInicial", dtI))
                    .Add(New MySqlParameter("@dataFinal", dtF))
                End With
                conn.Open()
                i = Convert.ToInt32(cmd.ExecuteScalar)
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            Finally
                conn.Close()
            End Try
    
            Return i
    
        End Function
    


    Sergio Ivanenko

    sábado, 2 de janeiro de 2016 01:44