Inquiridor
Inserir dados em tres tabelas relacionamento N:N

Pergunta
-
Conforme figura do form no Visual studio 2012 e diagrama de tabelas abaixo eu preciso inserir registros das tabelas no Banco SQL Server 2012.
- Tabela: tb_cad_pf (id_pf, nome_completo, Etc)
- Tabela: tb_cad_endereco (id_cad_endereco, cod_situacao, Etc)
- Tabela: tb_cad_pf_endereco (cod_pf, cod_cad_endereco)Considenrando a relação de N:N entre as tabelas de tb_cad_pf e tb_cad_endereco, sendo id_pf=cod_pf e id_cad_endereco-cod_cad_endereco.
O que estou pensando é ao clicar no botão inserir eu permito impostar os dados e ao clicar no Botão Gravar eu executo o comando abaixo para inserir dados nas tabelas tb_cad_pf e tb_cad_pf_endereco, porém como popular a tb_cad_pf_endereco?
Public Sub inserir()
Dim novo_cad As ClassModel4_pf = New ClassModel4_pf
Dim aRET1 As ArrayList
aRET1 = novo_cad.novo_pf_detecao(TextBox12_data_cadastro.Text, TextBox3_nome.Text, TextBox24_mae.Text, TextBox8_nasc.Text, RadioButtonList6_sexo.SelectedValue)
If Convert.ToInt32(aRET1(0)) >= 1 Then
End If
Dim novo_end As ClassModel3_Endereco = New ClassModel3_Endereco
Dim aRET2 As ArrayList
aRET2 = novo_end.novo_endereco_pf_detecao(RadioButtonList1_situacao.Text, RadioButtonList2_tipo.SelectedValue, TextBox5_logradouro.Text, TextBox6_numero.Text, DropDownList1_estado.SelectedValue, DropDownList2_municipio.SelectedValue, TextBox7_telefone.Text)
If Convert.ToInt32(aRET2(0)) >= 1 Then
End If
'....Como resgatar o id_pf e o id_cad_endereco?
End SubPublic Function novo_endereco_pf_detecao(p_cod_situacao, p_cod_tipo, p_logradouro, p_numero, p_telefone_fixo, p_cod_uf, p_cod_mun) As ArrayList
Dim aDR As ArrayList = New ArrayList()
Dim comando As String
comando = "INSERT INTO (cod_situacao, cod_tipo, logradouro, numero, cod_uf, cod_mun, telefone_fixo)" + _
"VALUES (@Par1, @Par2, @Par3, @Par4, @Par5, @Par6, @Par7)"
Dim param As ArrayList = New ArrayList()
param.Add(p_cod_situacao)
param.Add(p_cod_tipo)
param.Add(p_logradouro)
param.Add(p_numero)
param.Add(p_telefone_fixo)
param.Add(p_cod_uf)
param.Add(p_cod_mun)
aDR = Class2_ExecuteBD.Comando(comando, param)
Return aDR
End Function
Public Function novo_pf_detecao(p_data_cadastro, p_nome_completo, p_nome_mae, p_data_nascimento, p_cod_sexo) As ArrayList
Dim aDR As ArrayList = New ArrayList()
Dim comando As String
comando = "INSERT INTO tb_cad_pf (data_cadastro, nome_completo, nome_mae, data_nascimento, cod_sexo)" + _
"VALUES (@Par1, @Par2, @Par3, @Par4, @Par5)"
Dim param As ArrayList = New ArrayList()
param.Add(p_data_cadastro)
param.Add(p_nome_completo)
param.Add(p_nome_mae)
param.Add(p_data_nascimento)
param.Add(p_cod_sexo)
aDR = Class2_ExecuteBD.Comando(comando, param)
Return aDR
End Function
- Editado Wilson Boris segunda-feira, 24 de junho de 2013 14:28 adequação
Todas as Respostas
-
Wilson,
Você deseja resgatar os IDs que foram geradas após o Insert nas tabelas PF e Endereço?
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
-
-
A princípio estou com o código abaixo, mas será a melhor prática?
Public Sub inserir()
Dim novo_cad As ClassModel4_pf = New ClassModel4_pf
Dim aRET1 As ArrayList
aRET1 = novo_cad.novo_pf_detecao(TextBox12_data_cadastro.Text, TextBox3_nome.Text, TextBox24_mae.Text, TextBox8_nasc.Text, RadioButtonList6_sexo.SelectedValue)
If Convert.ToInt32(aRET1(0)) >= 1 Then
End If
Dim novo_end As ClassModel3_Endereco = New ClassModel3_Endereco
Dim aRET2 As ArrayList
aRET2 = novo_end.novo_endereco_pf_detecao(RadioButtonList1_situacao.Text, RadioButtonList2_tipo.SelectedValue, TextBox5_logradouro.Text, TextBox6_numero.Text, DropDownList1_estado.SelectedValue, DropDownList2_municipio.SelectedValue, TextBox7_telefone.Text)
If Convert.ToInt32(aRET2(0)) >= 1 Then
End If
Dim u1 As ClassModel4_pf = New ClassModel4_pf()
Dim retorno1 As Integer = u1.busca_id_pf_detecao(Label1_id_pf.Text)
If retorno1 = Label1_id_pf.Text Then
End If
Dim u2 As ClassModel3_Endereco = New ClassModel3_Endereco()
Dim retorno2 As Integer = u2.busca_id_endereco_detecao(Label2_id_cad_endereco.Text)
If retorno2 = Label2_id_cad_endereco.Text Then
End If
Dim novo_pf_end As ClassModel5_pf_endereco = New ClassModel5_pf_endereco
Dim aRET3 As ArrayList
aRET3 = novo_pf_end.novo_pf_endereco_detecao(Label2_id_cad_endereco.Text, Label1_id_pf.Text)
If Convert.ToInt32(aRET2(0)) >= 1 Then
Label1_retorno_CRUD_cad.Text = (String.Format("{0} Registro incluido com sucesso.", Convert.ToString(aRET3(0))))
End If
End Sub
Public Function novo_pf_detecao(p_data_cadastro, p_nome_completo, p_nome_mae, p_data_nascimento, p_cod_sexo) As ArrayList
Dim aDR As ArrayList = New ArrayList()
Dim comando As String
comando = "INSERT INTO tb_cad_pf (data_cadastro, nome_completo, nome_mae, data_nascimento, cod_sexo)" + _
"VALUES (@Par1, @Par2, @Par3, @Par4, @Par5)"
Dim param As ArrayList = New ArrayList()
param.Add(p_data_cadastro)
param.Add(p_nome_completo)
param.Add(p_nome_mae)
param.Add(p_data_nascimento)
param.Add(p_cod_sexo)
aDR = Class2_ExecuteBD.Comando(comando, param)
Return aDR
End Function
Public Function novo_endereco_pf_detecao(p_cod_situacao, p_cod_tipo, p_logradouro, p_numero, p_telefone_fixo, p_cod_uf, p_cod_mun) As ArrayList
Dim aDR As ArrayList = New ArrayList()
Dim comando As String
comando = "INSERT INTO (cod_situacao, cod_tipo, logradouro, numero, cod_uf, cod_mun, telefone_fixo)" + _
"VALUES (@Par1, @Par2, @Par3, @Par4, @Par5, @Par6, @Par7)"
Dim param As ArrayList = New ArrayList()
param.Add(p_cod_situacao)
param.Add(p_cod_tipo)
param.Add(p_logradouro)
param.Add(p_numero)
param.Add(p_telefone_fixo)
param.Add(p_cod_uf)
param.Add(p_cod_mun)
aDR = Class2_ExecuteBD.Comando(comando, param)
Return aDR
End Function
Public Function busca_id_pf_detecao(ByVal id_pf As Integer) As Integer
Dim a As Object
Dim c As SqlCommand = New SqlCommand
c.CommandText = "SELECT id_pf FROM tb_cad_pf WHERE nome_completo=@nome_completo and nome_mae=@nome_mae and data_nascimento=@data_nascimento"
c.Parameters.Add("@nome_completo", System.Data.SqlDbType.NChar).Value = nome_completo
c.Parameters.Add("@nome_mae", System.Data.SqlDbType.NChar).Value = nome_mae
c.Parameters.Add("@data_nascimento", System.Data.SqlDbType.Date).Value = data_nascimento
a = ClassData1_SelScalar.sel(c)
id_pf = Convert.ToInt32(a)
Return id_pf
End Function
Public Function busca_id_endereco_detecao(ByVal id_cad_endereco As Integer) As Integer
Dim a As Object
Dim c As SqlCommand = New SqlCommand
c.CommandText = "SELECT id_cad_endereco FROM tb_cad_endereco WHERE cod_situacao=@cod_situacao and cod_tipo=@cod_tipo and logradouro=@logradouro and numero=@numero"
c.Parameters.Add("@cod_situacao", System.Data.SqlDbType.Int).Value = cod_situacao
c.Parameters.Add("@cod_tipo", System.Data.SqlDbType.Int).Value = cod_tipo
c.Parameters.Add("@logradouro", System.Data.SqlDbType.NChar).Value = logradouro
c.Parameters.Add("@numero", System.Data.SqlDbType.NChar).Value = numero
a = ClassData1_SelScalar.sel(c)
id_cad_endereco = Convert.ToInt32(a)
Return id_cad_endereco
End Function
Public Function novo_pf_endereco_detecao(p_cod_cad_endereco, p_cod_pf) As ArrayList
Dim aDR As ArrayList = New ArrayList()
Dim comando As String
comando = "INSERT INTO tb_cad_pf_endereco (cod_cad_endereco, cod_pf)" + _
"VALUES (@Par1, @Par2)"
Dim param As ArrayList = New ArrayList()
param.Add(p_cod_cad_endereco)
param.Add(p_cod_pf)
aDR = Class2_ExecuteBD.Comando(comando, param)
Return aDR
End Function