Usuário com melhor resposta
Insert retornando ultimo Id inserido e ExecuteScalar

Pergunta
-
Alguém tem algum exemplo de Insert que retorne o número do registro de um banco SQL Server 2012?
- Editado Wilson Boris segunda-feira, 29 de julho de 2013 15:29 adequação
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
-
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
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
-
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.ModelIf 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 IfCAMADA MODEL:
Imports System.Data.Common
Imports System.Data.SqlClient
Imports WRB.DataPublic 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
-
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