Usuário com melhor resposta
Duvida com insert

Pergunta
-
Possuo algumas tabelas como podem ver no link abaixo.
https://www.filepicker.io/api/file/o37GZITmQYiQfemHeZWK
Preciso inserir dados na TB_Paciente pegar a PK que esta como identidade automatica e referencia lá na TB_Telefone mais não estou conseguindo efetuar esta operação peço a ajuda de vocês segue o código do insert.
Comando.CommandText = "insert into TB_PACIENTE (nome_Pac, endereco_Pac, sexo_Pac,rg_Pac,cpf_Pac, data_Nasc_Pac)values (@nome, @endereco, @sexo ,@Rg,@Cpf,@DataNasc) insert into TB_TELEFONE (idTB_Paciente, idTB_Funcionario, fixo_Tel, cel_Tel ) select idTB_Paciente,idTB_Funcionario, @telefone, @celular from TB_PACIENTE, TB_FUNCIONARIO" Dim parNome As SqlParameter = New SqlParameter("@nome", txtNome.Text) Dim parEndereco As SqlParameter = New SqlParameter("@endereco", txtEndereco.Text) Dim parSexo As SqlParameter = New SqlParameter("@sexo", rdoFeminino.Text) Dim parRg As SqlParameter = New SqlParameter("@Rg", txtRG.Text) Dim parCpf As SqlParameter = New SqlParameter("@Cpf", mskCPF.Text) Dim parData_Nasc As SqlParameter = New SqlParameter("@DataNasc", mskDataN.Text) Dim parTelefone As SqlParameter = New SqlParameter("@telefone", mskTelefone.Text) Dim parCelular As SqlParameter = New SqlParameter("@celular", mskCelular.Text) Comando.Parameters.Add(parNome) Comando.Parameters.Add(parEndereco) Comando.Parameters.Add(parSexo) Comando.Parameters.Add(parRg) Comando.Parameters.Add(parCpf) Comando.Parameters.Add(parData_Nasc) Comando.Parameters.Add(parTelefone) Comando.Parameters.Add(parCelular) MsgBox("Paciente salvo com sucesso") txtNome.Text = "" txtEndereco.Text = "" txtRG.Text = "" mskCPF.Text = "" mskDataN.Text = "" mskTelefone.Text = "" mskCelular.Text = "" Comando.ExecuteNonQuery()
Respostas
-
Boa tarde Swartelejonata,
Basicamente o que você precisa ter em mente é que no momento em que você faz a inserção em uma tabela, você logo em seguida pode fazer uma query pegando o último resultado com a seguinte query:
cmdGetIdentity = New OleDbCommand() cmdGetIdentity.CommandText = "SELECT @@IDENTITY" cmdGetIdentity.Connection = cnJetDB
E com isso, pegando a propriedade id e populando na outra tabela, esse método é claro seria se você não usasse entityframwork.
Se você utiliza, basta criar os atributos de forma correta que ele faz a inserção correta pra você. (Obs: Você pode usar o primeiro método para qualquer cenário, mesmo com o entity).
Atenciosamente, Roberto Alves
- Marcado como Resposta Marcos SJ quinta-feira, 13 de agosto de 2015 17:14
Todas as Respostas
-
Olá swartelejonata,
Tudo bem?
Então você precisa popular a TB_Paciente e criar uma FK na TB_Telefone que na verdade seria a PK da TB_Paciente. É isso?
Atenciosamente
Marcos Roberto de Souza Junior
Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita
MSDN Community Support
Por favor, lembre-se de Marcar como Resposta as respostas que resolveram o seu problema. Essa e uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.
-
Boa tarde Swartelejonata,
Basicamente o que você precisa ter em mente é que no momento em que você faz a inserção em uma tabela, você logo em seguida pode fazer uma query pegando o último resultado com a seguinte query:
cmdGetIdentity = New OleDbCommand() cmdGetIdentity.CommandText = "SELECT @@IDENTITY" cmdGetIdentity.Connection = cnJetDB
E com isso, pegando a propriedade id e populando na outra tabela, esse método é claro seria se você não usasse entityframwork.
Se você utiliza, basta criar os atributos de forma correta que ele faz a inserção correta pra você. (Obs: Você pode usar o primeiro método para qualquer cenário, mesmo com o entity).
Atenciosamente, Roberto Alves
- Marcado como Resposta Marcos SJ quinta-feira, 13 de agosto de 2015 17:14
-
-
Boa tarde Roberto,
Me perdoe pela minha ignorância e falta de conheciemnto mais toda vez que executo o projeto gera este erro:(Additional information: Falha ao converter o varchar valor 'SELECT @@IDENTITY' para o tipo de dados int.) Terei de fazer uma procedure no meu banco de dados ?
Veja como esta o código abaixo.
Private Sub btnSalvar_Click(sender As Object, e As EventArgs) Handles btnSalvar.Click 'conectar.Open() cmd = New SqlCommand cmd.Connection = conectar Dim x As New frmCadPaciente If txtNome.Text = "" Or txtEndereco.Text = "" Or mskCPF.Text = "" Or mskCelular.Text = "" Then MsgBox("Campos Obrigatorios não preenchidos") Exit Sub End If 'PRIMEIRO INSERT ' cmd.CommandText = "insert into TB_PACIENTE (nome_Pac, endereco_Pac, sexo_Pac,rg_Pac,cpf_Pac, data_Nasc_Pac)values '('" & txtNome.Text & "','" & txtEndereco.Text & "', '" & sexo & "' ,'" & txtRG.Text & "','" & mskCPF.Text & "','" & mskDataN.Text & "')" 'SEGUNDO INSERT Dim query2 As String = "SELECT @@IDENTITY" Dim ID As Integer cmd.CommandText = "insert into TB_TELEFONE (idTB_Paciente,idTB_FUncionario,fixo_Tel, cel_Tel) values ('" & query2 & "', null, '" & mskTelefone.Text & "' , '" & mskCelular.Text & "' )" 'cmd.Connection = conectar MsgBox("Paciente salvo com sucesso") txtNome.Text = "" txtEndereco.Text = "" txtRG.Text = "" mskCPF.Text = "" mskDataN.Text = "" mskTelefone.Text = "" mskCelular.Text = "" cmd.ExecuteNonQuery() cmd.CommandText = query2 ID = cmd.ExecuteScalar(query2) conectar.Close() End Sub
- Editado swartelejonata quinta-feira, 13 de agosto de 2015 20:55
-
Bom dia swartelejonata,
Caso a sua dúvida inicial tenha sido sanada e você tenha uma nova pergunta, eu sugiro que você abra uma nova thread. A não ser que sua pergunta seja apenas um mero detalhe em relação a resposta dada, neste caso não há a necessidade de abrir uma nova thread.
Atenciosamente<abbr class="affil"></abbr>
Marcos Roberto de Souza Junior
Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita
MSDN Community Support
Por favor, lembre-se de Marcar como Resposta as respostas que resolveram o seu problema. Essa e uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.