none
Como criar um campo com auto incremento em C#? RRS feed

  • Pergunta

  • Estou fazendo uma aplicação que pega os dados do produto como o Id, o Nome, o Lote, o Preço de Venda e a Marca.

    Primeiramente, fazemos a inserção dos valores, e logo após isso, fazemos com que o usuário clique no botão NovoId e ,assim, gere um novo Id para que o usuário não fique colocando Id's sem sentido.

    Mas na hora de gerar o Id, não mostra nenhuma mensagem , e quando vou olhar no banco de Dados, não aparece nenhuma atualização.

    OBS: Estamos utilizando o BD do Access.

    segunda-feira, 7 de outubro de 2013 12:33

Respostas

  • IndryDM,

    de uma olhada nesta Thread que acredito que solucione seu problema:

    Identity Access


    Julio Arruda
    __________________________________________
    Se foi util, marque como resposta
    .Net Coders
    Coordenador .Net Coders

    • Sugerido como Resposta Julio ArrudaMVP segunda-feira, 7 de outubro de 2013 12:56
    • Marcado como Resposta IngrydM segunda-feira, 7 de outubro de 2013 13:13
    segunda-feira, 7 de outubro de 2013 12:56
  • Veja se ajuda:

    int id = 0;
                OleDbConnection Con;
                
                try
                {
                    Con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\mydatabase.mdb;User Id=admin;
    Password=;");
                    using (Con)
                    {
                        string cmdString = "";
    
                        cmdString = "SELECT * FROM [tabela] ORDER BY id";
    
                        using (OleDbCommand cmd = new OleDbCommand(cmdString, Con))
                        {
                            Con.Open();                                        //Abre a conexão com o banco.
                            OleDbDataReader reader = cmd.ExecuteReader();      //Executa a Query de coleta de dados
                            while (reader.Read())
                            {
                               int.TryParse(reader["id"].ToString(),out id);
                            }
                            
    
                            Con.Close();
                        }
                    }
                    //incrementa o id
                    id += 1;
                    
                }
    
                catch (OleDbException ex)
                {
                    MessageBox.Show(ex.Message);
                }
                //adiciona o novo registro na tabela
                try
                {
                    Con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\mydatabase.mdb;User Id=admin;
    Password=;");
                    Con.Open();
    
                    using (OleDbCommand com = new OleDbCommand(@"INSERT INTO [tabela] (id) VALUES (" + id + ")", Con))
                    {
    
                        int j = com.ExecuteNonQuery();
    
                    }
    
    
                }
                catch (OleDbException ex)
                {
                    MessageBox.Show(ex.Message);
                }
                finally
                {
                    Con.Close();
                }
            }

    Não esqueça de fechar a conexão, sempre.
    • Marcado como Resposta IngrydM segunda-feira, 7 de outubro de 2013 13:47
    segunda-feira, 7 de outubro de 2013 13:43

Todas as Respostas

  • Desculpe IngryDM,

    Não consegui entender muito bem oque você deseja, mas caso oque entendi seja o correto,

    se você configurar um campo como autoincremento no banco, quando você fazer o insert já será gerado um id automaticamente.


    Julio Arruda
    __________________________________________
    Se foi util, marque como resposta
    .Net Coders
    Coordenador .Net Coders

    segunda-feira, 7 de outubro de 2013 12:38
  • Já vimos essa possibilidade. É que no meu caso eu preciso disso via código.

    Já dei um SELECT para encontrar o último registro. Agora preciso Pegar esse último e adicionar +1.

    Mas não estou conseguindo fazer isso. 

    segunda-feira, 7 de outubro de 2013 12:42
  • Bom, 

    Eu particularmente acho meio extranho isso que você quer fazer, mais não vou entrar no mérito disso.

    Como você esta tentando fazer essa "soma", e como você obtem esse "ultimo registro" do banco?


    Julio Arruda
    __________________________________________
    Se foi util, marque como resposta
    .Net Coders
    Coordenador .Net Coders

    segunda-feira, 7 de outubro de 2013 12:47
  • Obtenho esse último registro do banco por meio de um SELECT..Aqui está o SQL de procura:

    SELECT * FROM Produto  ORDER BY IdProduto  DESC;

    Após ele achar o último valor do banco, ele vai adicionar +1 ao valor atual.

    segunda-feira, 7 de outubro de 2013 12:51
  • IndryDM,

    de uma olhada nesta Thread que acredito que solucione seu problema:

    Identity Access


    Julio Arruda
    __________________________________________
    Se foi util, marque como resposta
    .Net Coders
    Coordenador .Net Coders

    • Sugerido como Resposta Julio ArrudaMVP segunda-feira, 7 de outubro de 2013 12:56
    • Marcado como Resposta IngrydM segunda-feira, 7 de outubro de 2013 13:13
    segunda-feira, 7 de outubro de 2013 12:56
  • Veja se ajuda:

    int id = 0;
                OleDbConnection Con;
                
                try
                {
                    Con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\mydatabase.mdb;User Id=admin;
    Password=;");
                    using (Con)
                    {
                        string cmdString = "";
    
                        cmdString = "SELECT * FROM [tabela] ORDER BY id";
    
                        using (OleDbCommand cmd = new OleDbCommand(cmdString, Con))
                        {
                            Con.Open();                                        //Abre a conexão com o banco.
                            OleDbDataReader reader = cmd.ExecuteReader();      //Executa a Query de coleta de dados
                            while (reader.Read())
                            {
                               int.TryParse(reader["id"].ToString(),out id);
                            }
                            
    
                            Con.Close();
                        }
                    }
                    //incrementa o id
                    id += 1;
                    
                }
    
                catch (OleDbException ex)
                {
                    MessageBox.Show(ex.Message);
                }
                //adiciona o novo registro na tabela
                try
                {
                    Con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\mydatabase.mdb;User Id=admin;
    Password=;");
                    Con.Open();
    
                    using (OleDbCommand com = new OleDbCommand(@"INSERT INTO [tabela] (id) VALUES (" + id + ")", Con))
                    {
    
                        int j = com.ExecuteNonQuery();
    
                    }
    
    
                }
                catch (OleDbException ex)
                {
                    MessageBox.Show(ex.Message);
                }
                finally
                {
                    Con.Close();
                }
            }

    Não esqueça de fechar a conexão, sempre.
    • Marcado como Resposta IngrydM segunda-feira, 7 de outubro de 2013 13:47
    segunda-feira, 7 de outubro de 2013 13:43
  • Isaias, 

    Na  boa, seu código ta meio extranho.

    Tipo, se eu preciso APENAS DO ID, porque deveria fazer um "Select * From" para retornar TODOS os campos da tabela?

    Outra coisa, porque percorrer TODOS OS REGISTROS da tabela, se quero apenas o ULTIMO ID? não seria mais fácil então fazer um "Select Max(Id) from ", que retorna apenas o registro necessário e economizo em processamento desnecessário?

    Não sou o dono da verdade, as vezes também erro, mas acredito que para postar uma resposta em um fórum, ainda mais um código que provavelmente alguem que está aprendendo vai utilizar, devemos reve-lo para ver se está correto, pois alguem pode colocar isso em sistemas grandes, e ferrar a vida de muita gente por uma "resposta de um fórum", e o mesmo pode acabar caindo em descredito.


    Julio Arruda
    __________________________________________
    Se foi util, marque como resposta
    .Net Coders
    Coordenador .Net Coders

    segunda-feira, 7 de outubro de 2013 13:51
  • Sim Julio, concordo com vc,

    com apenas algumas adaptações é possível otimizar este código.

    podemos trocar o "Select * From" para "Select id From" e usar o @@IDENTITY caso o campo for auto incremento, ou o Max como vc citou.

    Obrigado pela dica.

    segunda-feira, 7 de outubro de 2013 14:04