C#  - Resetando o valor do campo Auto incremental no MySQL


Neste artigo vou mostrar como  resetar o valor do campo definido como auto-increment em uma tabela do MySQL.

Eu já mostrei como recuperar o ID do último registro inserido no MS Access, no SQL Server e no MySQL neste artigos :

Vamos agora resetar o valor do campo auto incremental em uma tabela do MySQL.

Então, como podemos resetar e alterar um valor de um campo definido como Auto Increment no MySQL ?

Pois é, se você não sabia, o MySQL fornece um recurso útil chamado auto-increment onde você pode atribuir o atributo de incremento automático para uma coluna de uma tabela para gerar uma identidade exclusiva para a nova linha.

Normalmente, você usa o atributo de incremento automático para a coluna de chave primária da tabela.

Assim sempre que você inserir uma nova linha em uma tabela, o MySQL atribui automaticamente um número de sequência para a coluna de auto-increment.

E, se um dia você precisar alterar esse valor pode fazer isso de diversas formas no MySql.

  1. Resetar o campo auto-increment usando a instrução ALTER TABLE

ALTER TABLE 'nome_tabela' AUTO_INCREMENT = novo_numero;

Neste caso o valor de novo_numero tem que ser igual ou maior que o valor máximo atual da coluna auto-increment.

  1. Resetar o campo auto-increment usando a instrução TRUNCATE TABLE

TRUNCATE TABLE 'nome_tabela'

Esta instrução remove todos os dados da tabela e reseta o valor do campo auto-increment para zero.

  1. Resetar o campo auto-increment usando as instruções DROP TABLE e  CREATE TABLE

DROP TABLE 'nome_tabela'
CREATE TABLE 'nome_tabela'(...)

Essas instruções removem todos os dados da tabela, deleta a tabela e a recria resetando assim o valor do campo auto-increment para zero.

A seguir vou mostrar como fazer isso e vou usar o banco de dados Cadastro e a tabela alunos usados projeto criado no artigo :

Recursos usados:

Nota: Baixe e use a versão Community 2015 do VS ela é grátis e é equivalente a versão Professional.

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_ResetID 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 3 Labels, 3 TextBox, 1 GroupBox, dois Buttons e 1 DataGridView conforme o leiaute abaixo:

Implementando para resetar o valor do campo auto-increment

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;Uid=root;Pwd=******;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
            {
                InserirAluno(txtNome.Text, txtEmail.Text);
                dgvDados.DataSource = SelecionaAlunos();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Erro :" + ex.Message);
            }
        }

 

No método InserirAluno() estou incluindo os dados na tabela:

        public void 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();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                con.Close();
            }
        }

Para realizar a tarefa de resetar o valor do campo auto-increment vamos definir o código abaixo no evento Click do botão Resetar:

       private void btnResetar_Click(object sender, EventArgs e)
        {
            if (txtValorID.Text == string.Empty)
            {
                MessageBox.Show("Informe um valor válido");
            }
            else
            {
                MySqlCommand cmd = null;
                try
                {
                    // Cria o comando e a usa a instrução ALTER TABLE
                    cmd = new MySqlCommand(
                        "ALTER TABLE alunos AUTO_INCREMENT = " + Convert.ToInt32(txtValorID.Text), con);
                    // Executa o comando
                    con.Open();
                    cmd.ExecuteNonQuery();
                    MessageBox.Show("Campo auto-increment resetado com sucesso. ");
                }
                catch
                {
                    throw;
                }
                finally
                {
                    cmd.Dispose();
                    con.Close();
                }
            }
        }

O código basicamente executa a instrução SQL : ALTER TABLE alunos AUTO_INCREMENT = " + Convert.ToInt32(txtValorID.Text)

Onde estamos alterando a tabela alunos e atribuindo o novo valor para o campo auto-increment.

Executando o projeto veremos os registros existentes exibidos no datagridivew. Vemos que o último ID atribuído tem o valor 6 e o próximo terá o valor 7.

Vamos definir um novo valor para o ID informando o número 9 e clicando no botão Resetar. Veja o resultado abaixo:

Agora, podemos incluir um novo valor, e, verificar que o valor do ID informado terá o valor 9 conforme esperado:

Pegue o projeto completo aqui :  Mysql_ResetID.zip

Não se turbe o vosso coração; credes em Deus, crede também em mim.
Na casa de meu Pai há muitas moradas; se não fosse assim, eu vo-lo teria dito. Vou preparar-vos lugar.

João 14:1,2

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:


José Carlos Macoratti