Obter o id do registro incluído para uso na tabela relacionada no MySQL
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.
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.
Curtidas 0
Respostas
Tiago
08/10/2012
Boa noite, existe varias formas de se recuperar uma é por exemplo:
dessa forma você guarda o valor da chave em uma váriavel.
Espero ter ajudado
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
GOSTEI 0
Alisson Santos
08/10/2012
Conseguiu sanar sua duvida
GOSTEI 0
Joel Rodrigues
08/10/2012
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?
Como você esta fazendo a inserção?
GOSTEI 0
Joel Rodrigues
08/10/2012
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?
Como você esta fazendo a inserção?
GOSTEI 0
Gilberto Santos.
08/10/2012
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.
Agradeço.
GOSTEI 0
Gilberto Santos.
08/10/2012
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.
GOSTEI 0
Alexsandro Trindade
08/10/2012
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.
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.
GOSTEI 0
Alexsandro Trindade
08/10/2012
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.
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.
GOSTEI 0
Tiago
08/10/2012
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
Select nome_aluno as ALUNO
foreach(datarow linha in seudatatable.Rows){
STRING A =linha["ALUNO"].ToString();
}
Espero ter ajudado
GOSTEI 0
Gilberto Santos.
08/10/2012
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?
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.
GOSTEI 0
Gilberto Santos.
08/10/2012
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..
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..
GOSTEI 0
Geomar Canjundo
08/10/2012
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:
Esse metodo seria chamado logo após a inclusão e seria retorno do metod Insert da tabela Venda.
Espero ter ajudado.
Geomar Canjundo
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
GOSTEI 0
Valter Furtado
08/10/2012
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.
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.
GOSTEI 0