Obter o id do registro incluído para uso na tabela relacionada no MySQL
08/10/2012
0
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.
Posts
08/10/2012
Tiago
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
09/10/2012
Joel Rodrigues
Como você esta fazendo a inserção?
09/10/2012
Gilberto Santos.
Agradeço.
09/10/2012
Gilberto Santos.
10/10/2012
Alexsandro Trindade
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.
10/10/2012
Alexsandro Trindade
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.
10/10/2012
Tiago
Select nome_aluno as ALUNO
foreach(datarow linha in seudatatable.Rows){
STRING A =linha["ALUNO"].ToString();
}
Espero ter ajudado
10/10/2012
Gilberto Santos.
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.
10/10/2012
Gilberto Santos.
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..
11/10/2012
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
15/10/2012
Valter Furtado
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.
Clique aqui para fazer login e interagir na Comunidade :)