Obter o id do registro incluído para uso na tabela relacionada no MySQL

08/10/2012

0

Como faço para criar uma obter o retorno do id de um registro incluso em uma tabela, para usar posteriormente em outra tabela com relacionamento, no MySQL.
Exemplo tenho uma tabela de vendas e uma de itensdavenda, na intensdavenda preciso inserir o id da venda, mas não sei como recupera-lo apos a inserção no banco, alguma dica, de como recuperar este valor, sou novo em .net, e preciso de ajuda.
Gilberto Santos.

Gilberto Santos.

Responder

Posts

08/10/2012

Tiago

Boa noite, existe varias formas de se recuperar uma é por exemplo:
int id=0;
Foreach(DataRow item in DataTable.Rows){

    id=int.parse(item["id_venda"]);


}



dessa forma você guarda o valor da chave em uma váriavel.
Espero ter ajudado
Responder

09/10/2012

Alisson Santos

Conseguiu sanar sua duvida
Responder

09/10/2012

Joel Rodrigues

como foi dito, existe várias formas. Você poderia, por exemplo, criar um stored procedure que inserisse o registro e retornasse o seu código.
Como você esta fazendo a inserção?
Responder

09/10/2012

Gilberto Santos.

Thiago agradeço,mas acho que desta forma não dará certo, uma vez que o registro na tabela do banco de dados só e feito no momento em que e adicionado, sendo assim não tenho como armazena-lo, acho que atravez de uma Stored Procedure seria o ideal, porem não sei bem como obter este retorno, e nem como armazena-lo em uma variavel, alguém tem um exemplo para que eu pesquise.

Agradeço.
Responder

09/10/2012

Gilberto Santos.

A inserção esta sendo feita atravez de uma consulta SQL, que acrescenta a venda na tabela, porem não consigo inserir os itens da venda pois não tenho o id da venda armazenado ou retornado pela consulta.
Responder

10/10/2012

Alexsandro Trindade

Amigo, se vc tiver usando ADO.NET poderá criar uma classe para recuperar esse ID de acordo com a a tabela que tiver fazendo a insersção.

Exemplo:

public Int64 SelecionarUltimoRegistroGravado()
{
try
{
const string sql = "SELECT LAST_INSERT_ID(campo_id_da_tabela) " +
"AS ID from nome_tabela " +
"order by campo_id_da_tabela desc limit 1";

Int64 ultimoregistro = 0;

var leitor = ConexaoBanco.Select(sql);

if (leitor.HasRows)
{
while (leitor.Read())
{
ultimoregistro = Convert.ToInt64(leitor["ID"]);
}
}
return ultimoregistro;
}
catch (Exception e)
{
throw new ArgumentException("Erro ao executar a solicitação - " + e.Message);
}
}


Espero ter ajudado!

Abraços.
Responder

10/10/2012

Alexsandro Trindade

Amigo, se vc tiver usando ADO.NET poderá criar uma classe/método para recuperar esse ID de acordo com a a tabela que tiver fazendo a inserção.

Exemplo:

public Int64 SelecionarUltimoRegistroGravado()
{
try
{
const string sql = "SELECT LAST_INSERT_ID(campo_id_da_tabela) " +
"AS ID from nome_tabela " +
"order by campo_id_da_tabela desc limit 1";

Int64 ultimoregistro = 0;

var leitor = ConexaoBanco.Select(sql); //Select é um método da classe ConexaoBanco.

if (leitor.HasRows)
{
while (leitor.Read())
{
ultimoregistro = Convert.ToInt64(leitor["ID"]);
}
}
return ultimoregistro;
}
catch (Exception e)
{
throw new ArgumentException("Erro ao executar a solicitação - " + e.Message);
}
}


Espero ter ajudado!

Abraços.


Só lembrando que existe uma outra Classe chamada ConexaoBanco que faz o gerenciamento das conexões com o banco de dados.
Responder

10/10/2012

Tiago

Como ja foi comentando, é interessante você percorrer o dataset ou o datatable.. E localizar a coluna com o id... Uma dica é utilizar alias, assim fica fácil de recuperar o valor. Por exemplo


Select nome_aluno as ALUNO

foreach(datarow linha in seudatatable.Rows){
STRING A =linha["ALUNO"].ToString();

}

Espero ter ajudado
Responder

10/10/2012

Gilberto Santos.

como foi dito, existe várias formas. Você poderia, por exemplo, criar um stored procedure que inserisse o registro e retornasse o seu código.
Como você esta fazendo a inserção?




Estou utilizando o entity framework, no qual criei uma classe, onde passo os valores para inserção direta na tabela, porem não tenho o retorno do id pois não sei como usar ou obter o retorno atravez de uma stored procedure.

Responder

10/10/2012

Gilberto Santos.

Agradeço as dicas, tanto do Thiago como do Alex que e possivel obter o ultimo registro no banco referente a tabela, fazendo as consultas como explicado...

Porem estava esperando uma dica atravez do retorno de uma stored Procedure no MySQL, obtendo o valor do retorno, uma vez que da maneira que fiz os dados são registrados primeiro na tabela vendas, sendo assim quero obter o id(autoincremento) da tabela para de vendas para ai inserir os registros na tabela itensdavenda, normalmente mais de um item por venda.

Obrigado por enquanto..
Responder

11/10/2012

Geomar Canjundo

Gilberto,
do que entendi do seu problema penso que você pode fazer o seguinte:
Cria um metodo, que retorno um inteiro que pega o maior valor cadastrado na tabela venda após a última inclusão:
private int (string campo, string tabela)
{          string sql = "SELECT MAX(" + campo + ") AS INDICE FROM " + tabela;
            SqlCommand cmd = new SqlCommand(sql, conexao);
            cmd.CommandType = CommandType.Text;

            conexao.Open();
            SqlDataReader dr = cmd.ExecuteReader();


            int indice = 0;
            if (dr.Read())
            {
                indice = int.Parse(dr["INDICE"].ToString());

            }

            conexao.Close();
            return indice;
}




Esse metodo seria chamado logo após a inclusão e seria retorno do metod Insert da tabela Venda.

public int InserirVenda(VendaDTO dto)
      {
         string sql="sp_VENDA";
         int codigo = 0;
         SqlConnection conexao = this.ObterConexao();
         SqlCommand cmd = new SqlCommand(sql, conexao);
         cmd.CommandType = CommandType.StoredProcedure;
         cmd.Parameters.AddWithValue("@DESCRICAO", dto.PerDescricao);
         try 
         {
            conexao.Open();
            cmd.ExecuteNonQuery();
            codigo = ObterCodigoActual("PER_CODIGO", "ACA_PERIODO");
         }catch(Exception ex)
         {
             codigo=-1;
         
         }finally
         {
             conexao.Close();
             
         }

         return codigo;


      }


Espero ter ajudado.

Geomar Canjundo
Responder

15/10/2012

Valter Furtado

Se você for ter conexões concorrentes esse negocio de executar a SP, voltar pra classe, executar um select, você corre o risco de ter um registro sendo inserido junto com o seu, assim vai ter problemas na hora de pegar o ID.

Na SP que você insere o registro faça no fim isso que foi citado acima,
SELECT LAST_INSERT_ID(campo_id_da_tabela) AS ID from nome_tabela order by campo_id_da_tabela desc limit 1;

Colocando em uma variável ou colocando somente isso no fim, e no método dentro da classe use um ExecuteScalar() assim você tem o seu ID do ultimo registro cadastrado.

Não tenho como testar isso aqui mas acredito que funcione.
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar