Neste artigo vou mostrar como podemos obter o ID do último registro inserido no banco de dados MySQL. |
Eu já mostrei como recuperar o ID do último registro inserido no MS Access e no SQL Server nestes artigos :
Vamos fazer a mesma coisa para o MySQL.
Então, como obter o ID do último registro inserido no banco de dados MySQL ?
A resposta é depende.
Sim, vai depender de como e quando você precisa obter essa informação.
Você deseja obter o último registro inserido ou o maior existente ? Pense bem...
Existem 4 abordagens que você pode usar :
1 - Obter o valor do ID pelo maior valor da chave primária da tabela
SELECT MAX(ID) FROM tabela
Utiliza uma instrução SELECT usando a função MAX() que retorna o maior valor da coluna especificada, no caso a coluna ID. (*)
2 - Obter o ID usando uma consulta SELECT em ordem decrescente
SELECT ID FROM tabela ORDER BY ID DESC LIMIT 1
Utiliza uma instrução SELECT com a cláusula ORDER BY que ordena os registros pelo ID na ordem descendente (DESC) limitando o número de registros retornados a 1.(LIMI 1). (*)
(*) Obs: Nem sempre o maior será o último. Um usuário pode inserir manualmente um registro fora da ordem e neste caso não tem como saber qual o último usando as opções 1 e 2.
3- Obtendo o ID do último registro adicionado pelo comando INSERT INTO usando a função LAST_INSERT_ID
INSERT INTO tabela (nome) VALUES ('Macoratti'); SELECT LAST_INSERT_ID();
A função LAST_INSET_ID() retorna o último registro inserido, mas deve ser executada na mesma conexão que inseriu os registros.
4- Obtendo o ID do último registro adicionado pelo comando INSERT INTO usando a propriedade LastInsertedId do objeto Command do Connector do MySQL
Esta opção é bem simples. Basta obter o valor da propriedade LastInsertedId do objeto Command usado na conexão. Veja um exemplo de código:
if (cmd.LastInsertedId != 0) cmd.Parameters.Add(new MySqlParameter("ultimoId", cmd.LastInsertedId)); return Convert.ToInt32(cmd.Parameters["@ultimoId"].Value);
Geralmente, para obter o último registro inserido a opção 4 é a mais fácil de usar mas você tem que considerar as seguintes complicações :
Então o jeito é analisar o cenário de execução da consulta com cuidado levando em conta os fatores que podem atuar no momento da execução da sua consulta.
A seguir vou mostrar como usar a função em um cenário bem simples.
Recursos usados:
Visual Studio Community 2015 (update 3)
MySql
Nota: Baixe e use a versão Community 2015 do VS ela é grátis e é equivalente a versão Professional.
Criando a tabela de exemplo
Você vai precisar ter instalado o MySQL versão Community, o MySQL Connector/NET, o MySQL Workbench e no mínimo o VS 2013 ou VS 2015 versão Community ou Professional.
1 - Criando a tabela alunos
Vamos criar uma tabela chamada alunos em um banco de dados o MySQL usando o MySQL WorkBench.
A tabela terá a seguinte estrutura:
Observe que o campo ID é uma chave primária e Auto Increment, o que significa que o seu valor será incrementando automaticamente pelo SGBD após a inclusão de um registro.
Criando o projeto no Visual Studio 2015 Community
Abra o Visual Studio Community 2015 e clique em New Project;
Selecione Visual C# e o template Windows Forms Application.
Informe o nome Mysql_LastID e clique no botão OK.
Instalando o pacote do MySQL Connector via Nuget
No menu Tools clique em Nuget Packet Manager e a seguir em Manage Nuget Packages for Solution;
Clique na guia Browse, informe MySQL connector e a seguir escolha o pacote do MySql.Data marcando o projeto para o qual deseja instalar e clique em Install;
Definindo a interface com o usuário no formulário Form1.cs
No formulário Form1.cs inclua 4 Labels, 2 TextBox e dois Buttons e 1 DataGridView conforme o leiaute abaixo:
Implementando o código para obter o ID do último registro inserido
Neste exemplo eu estou usando um código bem simples no formulário apenas para mostrar o uso do recurso. Não estou fazendo validações nem tratando erros.
No formulário Form1.cs defina a string de conexão e um objeto MySqlConnection :
string _conexaoMySQL = "server=localhost;user id=root;password=******;database=cadastro"; MySqlConnection con = null;
Para exibir os registros no DataGridView estou usando o método :
public DataTable SelecionaAlunos()
{
try
{
String sql = "SELECT * FROM alunos";
con = new MySqlConnection(_conexaoMySQL);
MySqlCommand cmd = new MySqlCommand(sql, con);
MySqlDataAdapter da = new MySqlDataAdapter();
da.SelectCommand = cmd;
DataTable dt = new DataTable();
da.Fill(dt);
return dt;
}
catch (Exception ex)
{
throw ex;
}
}
|
Estou carregando os dados no evento Load:
private void Form1_Load(object sender, EventArgs e)
{
dgvDados.DataSource = SelecionaAlunos();
}
|
Estou inserindo registros na tabela aluno usando o evento Click do botão Inserir :
private void btnInserir_Click(object sender, EventArgs e)
{
try
{
int ultimoID = InserirAluno(txtNome.Text, txtEmail.Text);
lblResultado.Text = ultimoID.ToString();
dgvDados.DataSource = SelecionaAlunos();
}
catch (Exception ex)
{
MessageBox.Show("Erro :" + ex.Message);
}
}
|
No método InserirAluno() estou incluindo os dados e retornando um int que é o valor do último ID inserido na tabela:
public int InserirAluno(string _nome, string _email)
{
try
{
String sql = "INSERT INTO alunos (nome,email) VALUES (@nome,@email)";
con = new MySqlConnection(_conexaoMySQL);
MySqlCommand cmd = new MySqlCommand(sql, con);
cmd.Parameters.AddWithValue("@nome", _nome);
cmd.Parameters.AddWithValue("@email", _email);
con.Open();
cmd.ExecuteNonQuery();
// Verifica se existe um ultimo id inserido e adiciona um
// parametro para tratá-lo
if (cmd.LastInsertedId != 0)
cmd.Parameters.Add(new MySqlParameter("ultimoId", cmd.LastInsertedId));
// Retorna o id do novo rgistro e convert de Int64 para Int32 (int).
return Convert.ToInt32(cmd.Parameters["@ultimoId"].Value);
}
catch (Exception ex)
{
throw ex;
}
finally
{
con.Close();
}
}
|
Executando o projeto e inserindo um registro, vemos o resultado abaixo exibindo o último ID do registro incluído:
Pegue o projeto completo aqui : MySQL_LastID.zip
(Disse Jesus)Este
povo se aproxima de mim com a sua boca e me honra com os seus lábios, mas o seu
coração está longe de mim.
Mas, em vão me adoram, ensinando doutrinas que são preceitos dos homens.
Mateus 15:8,9
Veja os
Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique
e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ? |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Visual Studio - Dica de produtividade - Quick Launch - Macoratti.net
Visual Studio - Dica de produtividade - Nuget - Macoratti.net
.NET - Dicas de site com livros gratuitos para estudo - Macoratti.net