Usuário com melhor resposta
recuperar id de um metodo

Pergunta
-
Bom dia,
Tenho um evento salvar, esse evento salva em duas tabelas.
Mas preciso recuperar o id do primeiro método para salvar no segundo método.
no primeiro método, a query está me retornando o id a Salvar = (RETURNING ID).
Mas não esta salvando somente o id.
código do evento:
else { DTO.Agenda agen = new DTO.Agenda(); agen.agen_nro_processo = txtProcesso.Text; agen.descricao_agenda = txtDetalhamento.Text; agen.agen_us_id = lstUsuarios.SelectedValue.ToInt(); agen.agen_prazo = Convert.ToDateTime(calendarioPrazo.SelectedDate); agen.agen_status_id = lstStatus.SelectedValue.ToInt(); agen.agen_id = new BLL.CadastroAgenda().inserirAgenda(agen); for (txtDetalhamento.Text ) { new BLL.CadastroAgenda().inserirDescricao(agen); } }
método:
public int inserirAgenda(DTO.Agenda agen) { StringBuilder strQuery = new StringBuilder(); strQuery.Append("INSERT INTO tb_agenda_advogados( "); strQuery.Append("agen_nro_processo, agen_us_id, "); strQuery.Append(" agen_prazo, status_agen_id )"); strQuery.Append("values(@agen_nro_processo, @agen_us_id, "); strQuery.Append(" @agen_prazo, @status_agen_id) RETURNING agen_id; "); using (NpgsqlConnection con = new NpgsqlConnection(strConSalamone)) { try { con.Open(); using (NpgsqlCommand cmd = new NpgsqlCommand(strQuery.ToString(), con)) { cmd.Parameters.AddWithValue("@agen_nro_processo", agen.agen_nro_processo); cmd.Parameters.AddWithValue("@agen_us_id", agen.agen_us_id); //cmd.Parameters.AddWithValue("@agen_descricao", agen.agen_descricao); //cmd.Parameters.AddWithValue("@descricao_agenda", agen.descricao_agenda); cmd.Parameters.AddWithValue("@agen_prazo", agen.agen_prazo); cmd.Parameters.AddWithValue("@status_agen_id", agen.agen_status_id); using (NpgsqlDataReader rd = cmd.ExecuteReader()) { if (rd.Read()) return rd[0].ToString().ToInt(); else return 0; } } } catch (Exception) { throw; } finally { con.Close(); } } }
Fernando Gomes
terça-feira, 12 de janeiro de 2016 11:57
Respostas
-
Por favor, lembre-se de “Marcar como Resposta” as respostas que resolveram o seu problema. Essa é 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.Voce pode utilizar o seguinte comando ao final da sua query
;SELECT CAST(scope_identity() AS int);
ele irá retornar o ultimo ID.
- Editado Erick WendelMVP terça-feira, 12 de janeiro de 2016 12:06
- Sugerido como Resposta Erick WendelMVP terça-feira, 12 de janeiro de 2016 12:06
- Marcado como Resposta fgoliveira terça-feira, 12 de janeiro de 2016 13:42
terça-feira, 12 de janeiro de 2016 12:05 -
Fernando, pelo que entendi a sua query e método estão te retornando o ID com sucesso, porém não está sendo possível salvar o registro com o mesmo ID no segundo método. É isso?
Se for imagino que o problema esteja na modelagem da tabela do segundo método. Na tabela de descrição da agenda você possui um ID de descrição e um ID de agenda?
- Marcado como Resposta fgoliveira terça-feira, 12 de janeiro de 2016 13:42
terça-feira, 12 de janeiro de 2016 12:10 -
Erick, desculpe! deixa eu ver se eu entendi!
eu tiro essa parte do meu metodo?
using (NpgsqlDataReader rd = cmd.ExecuteReader()) { if (rd.Read()) return rd[0].ToString().ToInt(); else return 0; }
e insiro a linha que me passou?
Fernando Gomes
- Marcado como Resposta fgoliveira terça-feira, 12 de janeiro de 2016 13:42
terça-feira, 12 de janeiro de 2016 12:10 -
sim possui e interligado pela chave estrangeira.
Fernando Gomes
- Marcado como Resposta fgoliveira terça-feira, 12 de janeiro de 2016 13:42
terça-feira, 12 de janeiro de 2016 12:19 -
Isto mesmo, ou voce pode usar o cmd.ExecuteScalar que retornará um objeto, converta ele para int e estará com este ID
Por favor, lembre-se de “Marcar como Resposta” as respostas que resolveram o seu problema. Essa é 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.
- Sugerido como Resposta Erick WendelMVP terça-feira, 12 de janeiro de 2016 12:33
- Marcado como Resposta fgoliveira terça-feira, 12 de janeiro de 2016 13:42
terça-feira, 12 de janeiro de 2016 12:33 -
Erick, o metodo está retornando o id, mas não estou conseguindo pegar ele no evento apenas.
Fernando Gomes
- Marcado como Resposta fgoliveira terça-feira, 12 de janeiro de 2016 13:41
terça-feira, 12 de janeiro de 2016 12:46 -
Convert.ToInt32(rd[0]);
Por favor, lembre-se de “Marcar como Resposta” as respostas que resolveram o seu problema. Essa é 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.- Sugerido como Resposta Erick WendelMVP terça-feira, 12 de janeiro de 2016 12:50
- Marcado como Resposta fgoliveira terça-feira, 12 de janeiro de 2016 13:41
terça-feira, 12 de janeiro de 2016 12:50 -
como ficaria o método inteiro?
Fernando Gomes
- Marcado como Resposta fgoliveira terça-feira, 12 de janeiro de 2016 13:41
terça-feira, 12 de janeiro de 2016 12:54 -
//em sua query adicione ele no fim strQuery.Append(" @agen_prazo, @status_agen_id) RETURNING agen_id;SELECT CAST(scope_identity() AS int); "); //REMOVA TODA o codigo do using (NpgsqlDataReader rd = cmd.ExecuteReader()) ... //e retorne direto o inteiro return Convert.ToInt32(cmd.ExecuteExecuteScalar()); //---------------------------------------------------------- //ou mantenha seu metodo apenas convertendo o retorno using (NpgsqlDataReader rd = cmd.ExecuteReader()) { if (rd.Read()) return Convert.ToInt32(rd[0]); else return 0; }
Por favor, lembre-se de “Marcar como Resposta” as respostas que resolveram o seu problema. Essa é 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.- Sugerido como Resposta Erick WendelMVP terça-feira, 12 de janeiro de 2016 13:15
- Marcado como Resposta fgoliveira terça-feira, 12 de janeiro de 2016 13:41
terça-feira, 12 de janeiro de 2016 13:15 -
Fernando tenta depurar o método pra identificar o problema...se está retornando ID é alguma falha pequena no código.
- Marcado como Resposta fgoliveira terça-feira, 12 de janeiro de 2016 13:41
terça-feira, 12 de janeiro de 2016 13:16 -
e como chamar ele no evento?
Fernando Gomes
- Marcado como Resposta fgoliveira terça-feira, 12 de janeiro de 2016 13:41
terça-feira, 12 de janeiro de 2016 13:29 -
assim?:
else { DTO.Agenda agen = new DTO.Agenda(); agen.agen_nro_processo = txtProcesso.Text; agen.descricao_agenda = txtDetalhamento.Text; agen.agen_us_id = lstUsuarios.SelectedValue.ToInt(); agen.agen_prazo = Convert.ToDateTime(calendarioPrazo.SelectedDate); agen.agen_status_id = lstStatus.SelectedValue.ToInt(); new BLL.CadastroAgenda().inserirAgenda(agen); agen.agen_id = new BLL.CadastroAgenda().inserirDescricao(agen); }
Fernando Gomes
- Marcado como Resposta fgoliveira terça-feira, 12 de janeiro de 2016 13:41
terça-feira, 12 de janeiro de 2016 13:31 -
Para perguntas diferentes, crie uma nova thread para manter a organização do forúm, se a resposta acima lhe ajudou ou resolveu seu problema, peço que marque como resposta
- Marcado como Resposta fgoliveira terça-feira, 12 de janeiro de 2016 13:41
terça-feira, 12 de janeiro de 2016 13:37
Todas as Respostas
-
Por favor, lembre-se de “Marcar como Resposta” as respostas que resolveram o seu problema. Essa é 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.Voce pode utilizar o seguinte comando ao final da sua query
;SELECT CAST(scope_identity() AS int);
ele irá retornar o ultimo ID.
- Editado Erick WendelMVP terça-feira, 12 de janeiro de 2016 12:06
- Sugerido como Resposta Erick WendelMVP terça-feira, 12 de janeiro de 2016 12:06
- Marcado como Resposta fgoliveira terça-feira, 12 de janeiro de 2016 13:42
terça-feira, 12 de janeiro de 2016 12:05 -
Fernando, pelo que entendi a sua query e método estão te retornando o ID com sucesso, porém não está sendo possível salvar o registro com o mesmo ID no segundo método. É isso?
Se for imagino que o problema esteja na modelagem da tabela do segundo método. Na tabela de descrição da agenda você possui um ID de descrição e um ID de agenda?
- Marcado como Resposta fgoliveira terça-feira, 12 de janeiro de 2016 13:42
terça-feira, 12 de janeiro de 2016 12:10 -
Erick, desculpe! deixa eu ver se eu entendi!
eu tiro essa parte do meu metodo?
using (NpgsqlDataReader rd = cmd.ExecuteReader()) { if (rd.Read()) return rd[0].ToString().ToInt(); else return 0; }
e insiro a linha que me passou?
Fernando Gomes
- Marcado como Resposta fgoliveira terça-feira, 12 de janeiro de 2016 13:42
terça-feira, 12 de janeiro de 2016 12:10 -
sim possui e interligado pela chave estrangeira.
Fernando Gomes
- Marcado como Resposta fgoliveira terça-feira, 12 de janeiro de 2016 13:42
terça-feira, 12 de janeiro de 2016 12:19 -
Isto mesmo, ou voce pode usar o cmd.ExecuteScalar que retornará um objeto, converta ele para int e estará com este ID
Por favor, lembre-se de “Marcar como Resposta” as respostas que resolveram o seu problema. Essa é 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.
- Sugerido como Resposta Erick WendelMVP terça-feira, 12 de janeiro de 2016 12:33
- Marcado como Resposta fgoliveira terça-feira, 12 de janeiro de 2016 13:42
terça-feira, 12 de janeiro de 2016 12:33 -
Erick, o metodo está retornando o id, mas não estou conseguindo pegar ele no evento apenas.
Fernando Gomes
- Marcado como Resposta fgoliveira terça-feira, 12 de janeiro de 2016 13:41
terça-feira, 12 de janeiro de 2016 12:46 -
Convert.ToInt32(rd[0]);
Por favor, lembre-se de “Marcar como Resposta” as respostas que resolveram o seu problema. Essa é 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.- Sugerido como Resposta Erick WendelMVP terça-feira, 12 de janeiro de 2016 12:50
- Marcado como Resposta fgoliveira terça-feira, 12 de janeiro de 2016 13:41
terça-feira, 12 de janeiro de 2016 12:50 -
como ficaria o método inteiro?
Fernando Gomes
- Marcado como Resposta fgoliveira terça-feira, 12 de janeiro de 2016 13:41
terça-feira, 12 de janeiro de 2016 12:54 -
//em sua query adicione ele no fim strQuery.Append(" @agen_prazo, @status_agen_id) RETURNING agen_id;SELECT CAST(scope_identity() AS int); "); //REMOVA TODA o codigo do using (NpgsqlDataReader rd = cmd.ExecuteReader()) ... //e retorne direto o inteiro return Convert.ToInt32(cmd.ExecuteExecuteScalar()); //---------------------------------------------------------- //ou mantenha seu metodo apenas convertendo o retorno using (NpgsqlDataReader rd = cmd.ExecuteReader()) { if (rd.Read()) return Convert.ToInt32(rd[0]); else return 0; }
Por favor, lembre-se de “Marcar como Resposta” as respostas que resolveram o seu problema. Essa é 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.- Sugerido como Resposta Erick WendelMVP terça-feira, 12 de janeiro de 2016 13:15
- Marcado como Resposta fgoliveira terça-feira, 12 de janeiro de 2016 13:41
terça-feira, 12 de janeiro de 2016 13:15 -
Fernando tenta depurar o método pra identificar o problema...se está retornando ID é alguma falha pequena no código.
- Marcado como Resposta fgoliveira terça-feira, 12 de janeiro de 2016 13:41
terça-feira, 12 de janeiro de 2016 13:16 -
e como chamar ele no evento?
Fernando Gomes
- Marcado como Resposta fgoliveira terça-feira, 12 de janeiro de 2016 13:41
terça-feira, 12 de janeiro de 2016 13:29 -
assim?:
else { DTO.Agenda agen = new DTO.Agenda(); agen.agen_nro_processo = txtProcesso.Text; agen.descricao_agenda = txtDetalhamento.Text; agen.agen_us_id = lstUsuarios.SelectedValue.ToInt(); agen.agen_prazo = Convert.ToDateTime(calendarioPrazo.SelectedDate); agen.agen_status_id = lstStatus.SelectedValue.ToInt(); new BLL.CadastroAgenda().inserirAgenda(agen); agen.agen_id = new BLL.CadastroAgenda().inserirDescricao(agen); }
Fernando Gomes
- Marcado como Resposta fgoliveira terça-feira, 12 de janeiro de 2016 13:41
terça-feira, 12 de janeiro de 2016 13:31 -
Para perguntas diferentes, crie uma nova thread para manter a organização do forúm, se a resposta acima lhe ajudou ou resolveu seu problema, peço que marque como resposta
- Marcado como Resposta fgoliveira terça-feira, 12 de janeiro de 2016 13:41
terça-feira, 12 de janeiro de 2016 13:37