none
Insert retornando ultimo Id inserido e ExecuteScalar RRS feed

Respostas

  • Não entendi muito bem o que você quer , mas se for sobre pegar o ultimo Id inserido fazemos assim :

    -- Após um INSERT usamos o seguinte SELECT
    
    SELECT @@IDENTITY AS Codigo

    Com isso no método de inserção usamos o ExecuteScalar , que tem como objetivo executar a instrução SQL e Retornar apenas um Valor.

    Se lhe foi útil marque como resposta.


    Davi Murilo Referência Principal : Jesus que ilumina minha mente.
    Referência Profissonal : http://www.tidm.com.br

    • Marcado como Resposta Wilson Boris terça-feira, 30 de julho de 2013 15:50
    segunda-feira, 29 de julho de 2013 14:30
  • Davi,

    consegui com o código abaixo:

    Public Function novo_prof(p_nome_completo, p_nome_mae, p_cpf, p_cod_ocupacao, p_usuario, p_senha) As ArrayList

            Dim aDR As ArrayList = New ArrayList()
            Dim comando As String
            comando = "INSERT INTO tb_cad_pf (nome_completo, nome_mae, cpf)" + _
                                      "VALUES (@Par1, @Par2, @Par3)" + _
                                      "INSERT INTO tb_cad_pf_profissional (cod_ocupacao, usuario, senha, cod_pf)" + _
                                      "VALUES (@Par4,@Par5,@Par6,(SELECT SCOPE_IDENTITY()));"
            Dim param As ArrayList = New ArrayList()
            param.Add(p_nome_completo)
            param.Add(p_nome_mae)
            param.Add(p_cpf)
            param.Add(p_cod_ocupacao)
            param.Add(p_usuario)
            param.Add(p_senha)
            aDR = Class2_ExecuteBD.Comando(comando, param)

            Return aDR
        End Function

    Imports System.Data.SqlClient

    Public Class Class2_ExecuteBD
        Public Shared Function Comando(commando As String, param As ArrayList)
            Dim retorno As ArrayList = New ArrayList()
            Dim erro As Exception
            Dim erromensagem As String = ""
            Dim DT As DataTable = New DataTable()
            Using CN As SqlConnection = New SqlConnection()
                Try
                    CN.ConnectionString = My.Settings.cn1
                    Dim com As SqlCommand = New SqlCommand()
                    com.CommandText = commando
                    com.CommandType = CommandType.Text
                    Dim c As Integer
                    For Each item In param
                        c += 1
                        com.Parameters.Add(String.Format("@Par{0}", c), ClassData2_Banco.GetDBType(item.GetType())).Value = item
                    Next
                    com.Connection = CN
                    CN.Open()
                    Dim qtd As Integer = com.ExecuteNonQuery()
                    retorno.Add(qtd)
                    CN.Close()
                    Return retorno
      End Function

    • Marcado como Resposta Wilson Boris terça-feira, 30 de julho de 2013 15:50
    terça-feira, 30 de julho de 2013 15:50

Todas as Respostas

  • Não entendi muito bem o que você quer , mas se for sobre pegar o ultimo Id inserido fazemos assim :

    -- Após um INSERT usamos o seguinte SELECT
    
    SELECT @@IDENTITY AS Codigo

    Com isso no método de inserção usamos o ExecuteScalar , que tem como objetivo executar a instrução SQL e Retornar apenas um Valor.

    Se lhe foi útil marque como resposta.


    Davi Murilo Referência Principal : Jesus que ilumina minha mente.
    Referência Profissonal : http://www.tidm.com.br

    • Marcado como Resposta Wilson Boris terça-feira, 30 de julho de 2013 15:50
    segunda-feira, 29 de julho de 2013 14:30
  • Obrigado pelo retorno Murilo,

    eu tenho tentado usar no método do Insert o ExecuteScalar, mas estou patinando.

    Teria alguma dica? 

    CAMADA VIEW:

    Imports System.Data.Common

    Imports System.Data.DataSet
    Imports System.Web.UI.WebControls
    Imports System.Data.SqlClient
    Imports WRB.Model

      If Button4_gravar_prof.BackColor = Drawing.Color.Red Then

                Dim novo_cad As ClassModel_profissional = New ClassModel_profissional
                Dim aRET1 As ArrayList
                aRET1 = novo_cad.novo_prof(TextBox1_cpf_prof.Text, TextBox1_nome_prof.Text, TextBox2_nome_mae_prof.Text)
                End If

    CAMADA MODEL:

    Imports System.Data.Common
    Imports System.Data.SqlClient
    Imports WRB.Data

          Public Class ClassModel_profissional
            Public Function novo_prof(p_nome_completo, p_nome_mae, p_cpf) As ArrayList
            Dim aDR As ArrayList = New ArrayList()
            Dim comando As String
            comando = "INSERT INTO tb_cad_pf (nome_completo, nome_mae, cpf)" + _
                                      "OUTPUT Inserted.id_pf" + _
                                      "VALUES (@Par1, @Par2, @Par3)"
            Dim param As ArrayList = New ArrayList()
            param.Add(p_nome_completo)
            param.Add(p_nome_mae)
            param.Add(p_cpf)
            aDR = ClassData1_SelScalar.sel()
            Return aDR
            End Function
            End Class

    CAMADA DATA COM EXECUTESCALAR:
    Public Class ClassData1_SelScalar
        Public Shared Function sel(ByVal c As SqlCommand) As String
            Dim obj As Object
            Using CN As SqlConnection = New SqlConnection()
                Try
                    CN.ConnectionString = My.Settings.cn1
                    Dim com As SqlCommand = New SqlCommand()
                    com = c
                    com.Connection = CN
                    CN.Open()
                    obj = com.ExecuteScalar()
                    CN.Close()
                    If IsDBNull(obj) Then
                        obj = ""
                    End If
                    Return obj
                Catch ex As Exception
                    Return ex.Message
                End Try
                Return obj
            End Using
        End Function


    • Editado Wilson Boris segunda-feira, 29 de julho de 2013 14:36 complemento
    segunda-feira, 29 de julho de 2013 14:35
  • Davi,

    consegui com o código abaixo:

    Public Function novo_prof(p_nome_completo, p_nome_mae, p_cpf, p_cod_ocupacao, p_usuario, p_senha) As ArrayList

            Dim aDR As ArrayList = New ArrayList()
            Dim comando As String
            comando = "INSERT INTO tb_cad_pf (nome_completo, nome_mae, cpf)" + _
                                      "VALUES (@Par1, @Par2, @Par3)" + _
                                      "INSERT INTO tb_cad_pf_profissional (cod_ocupacao, usuario, senha, cod_pf)" + _
                                      "VALUES (@Par4,@Par5,@Par6,(SELECT SCOPE_IDENTITY()));"
            Dim param As ArrayList = New ArrayList()
            param.Add(p_nome_completo)
            param.Add(p_nome_mae)
            param.Add(p_cpf)
            param.Add(p_cod_ocupacao)
            param.Add(p_usuario)
            param.Add(p_senha)
            aDR = Class2_ExecuteBD.Comando(comando, param)

            Return aDR
        End Function

    Imports System.Data.SqlClient

    Public Class Class2_ExecuteBD
        Public Shared Function Comando(commando As String, param As ArrayList)
            Dim retorno As ArrayList = New ArrayList()
            Dim erro As Exception
            Dim erromensagem As String = ""
            Dim DT As DataTable = New DataTable()
            Using CN As SqlConnection = New SqlConnection()
                Try
                    CN.ConnectionString = My.Settings.cn1
                    Dim com As SqlCommand = New SqlCommand()
                    com.CommandText = commando
                    com.CommandType = CommandType.Text
                    Dim c As Integer
                    For Each item In param
                        c += 1
                        com.Parameters.Add(String.Format("@Par{0}", c), ClassData2_Banco.GetDBType(item.GetType())).Value = item
                    Next
                    com.Connection = CN
                    CN.Open()
                    Dim qtd As Integer = com.ExecuteNonQuery()
                    retorno.Add(qtd)
                    CN.Close()
                    Return retorno
      End Function

    • Marcado como Resposta Wilson Boris terça-feira, 30 de julho de 2013 15:50
    terça-feira, 30 de julho de 2013 15:50