Usuário com melhor resposta
como criar sequencial de números em um textbox no windowsform c#

Pergunta
-
Ola pessoal tudo bem, estou precisando criar um sequencial de número no textbox para o codigo do cliente, ou como posso trazer do banco o codigo do cliente que a coluna esta com identity e o textbox amostrar o proximo numero sequencial para cadastrar um novo cliente ?
Respostas
-
Você pode executar esse código na hora que clicar em novo registro e direcionar o valor de NextId para dentro desse TextBox!
Fulvio C
- Marcado como Resposta Aelton Menezes terça-feira, 10 de novembro de 2015 19:40
Todas as Respostas
-
Boa noite.
AQUI tem uma thread com um problema igual.
O ideal seria apresentar o ID após a inserção.
Atente-se aos meus avisos, pois as maneiras marcadas como resposta abrem brechas para vários problemas que podem acontecer com o uso do sistema.
Att., Rafael Simor
-
Quer que eu desmarqeue alguma resposta naquela thread?
Marcos Roberto de Souza Junior
Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita
MSDN Community Support
Por favor, lembre-se de Marcar como Resposta as respostas que resolveram o seu problema. Essa e uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.
-
Bom dia.
Obrigado, Marcos, mas não acho que há necessidade.
De uma forma as respostas realmente resolvem a dúvida; o "único" problema é que se a pessoa não ler todos posts, a solução pode gerar alguns outros problemas no futuro.
Att., Rafael Simor
-
Boa noite.
AQUI tem uma thread com um problema igual.
O ideal seria apresentar o ID após a inserção.
Atente-se aos meus avisos, pois as maneiras marcadas como resposta abrem brechas para vários problemas que podem acontecer com o uso do sistema.
Att., Rafael Simor
Desculpe minha intromissão, mas, o link não é uma resposta apropriada, imagine se eu excluo o ultimo registro e tente inserir um novo registro ele vai causar ai um problema trazendo o valor do último registro excluído.
Link que diz que é mau prática:
A outra parte da resposta sua é perfeita, visto que só podemos ter o novo número a partir da inserção.
Fulvio C
-
Bom Aelton Menezes,
O melhor é igual o SimorC relatou na 3 linha da sua resposta. Existe uma maneira assim:
SELECT IDENT_CURRENT('nomedatabela') + IDENT_INCR('nomedatabela')
Ele trará para você é uma base SQL Server o próximo registro. Se for para uma tela isso funciona bem, mas, se existir esse sistema em redes isso também não vai ajudar, visto que dois podem estár na mesma tela e fazendo cadastros ao mesmo tempo trazendo dados inválidos ao cadastro.
A melhor forma seria inserir o registro e trazer os Id Inserido com:
//comando para SQLServer, cada banco tem a sua nomenclatura
SELECT SCOPE_IDENTITY()
Fulvio C
-
Fulvio, não se preocupe sobre a "intromissão", acredito que todos aqui estamos abertos a críticas e sugestões :)
E sim, Fulvio, te entendo perfeitamente.
Na verdade é mais ou menos isso que havia falado.
O MAX+1 realmente não é usual nunca, porém o "IDENT_CURRENT" resolveria, na teoria, o problema.
A questão é: e se dois usuários abrirem o mesmo formulário de inserção ao mesmo tempo? Somente o primeiro usuário que fizer o INSERT terás o ID que havia sido mostrado, para o outro, um ID diferente será gerado.
Att., Rafael Simor
-
Fulvio, não se preocupe sobre a "intromissão", acredito que todos aqui estamos abertos a críticas e sugestões :)
E sim, Fulvio, te entendo perfeitamente.
Na verdade é mais ou menos isso que havia falado.
O MAX+1 realmente não é usual nunca, porém o "IDENT_CURRENT" resolveria, na teoria, o problema.
A questão é: e se dois usuários abrirem o mesmo formulário de inserção ao mesmo tempo? Somente o primeiro usuário que fizer o INSERT terás o ID que havia sido mostrado, para o outro, um ID diferente será gerado.
Att., Rafael Simor
Fulvio C
-
Aliás, minha ideia no outro tópico era de criar um registro temporário, exibir este ID gerado na tela e, ao clicar no botão, fazer o update deste registro.
Assim terá gerado um ID e este ID não poderá ser usado mais para nada.
Mas com isso existem outros problemas:
- Se o usuário cancelar a operação, esta linha deve ser excluída.
- Todos SELECTs do sistema precisam ignorar estes registros fantasmas.
- Sempre ao abrir/fechar o formulário, processamento desnecessário será executado.
Mas recomendaria esta alternativa somente se a exibição do ID seja crucial ao sistema, pois senão é mais fácil e melhor simplesmente exibir o ID após a inserção, como de fato deveria ser.
Att., Rafael Simor
-
-
Bem simples seria assim:
int NextId = 0; // proximo valor string NameTable = "people"; using (SqlConnection Conn = new SqlConnection(@"Server=.\SQLExpress;Database=myEntities;User Id=sa;Password=senha;")) using (SqlCommand Command = new SqlCommand(string.Format("SELECT IDENT_CURRENT('{0}') + IDENT_INCR('{0}')", NameTable), Conn)) { Conn.Open(); int.TryParse(Command.ExecuteScalar().ToString(), out NextId); Conn.Close(); }
Quando ele acabar de executar até o último } o NextId terá o próximo registro
Fulvio C
-
Ele trará para você é uma base SQL Server o próximo registro. Se for para uma tela isso funciona bem, mas, se existir esse sistema em redes isso também não vai ajudar, visto que dois podem estár na mesma tela e fazendo cadastros ao mesmo tempo trazendo dados inválidos ao cadastro.
Aelton, lembre-se do que foi discutido aqui.
Implementar esta forma de pegar o "próximo Id" funcionará somente se uma tela de cadastro for aberta por vez (tanto pelo mesmo usuário como outros usuários em rede), como o próprio Fluvio falaste.
Use com cautela.
Att., Rafael Simor
-
Executei o código e esta tudo certo mas não aparece o codigo do banco no textbox, o sistema vai ficar em rede mas só apenas um computador será responsável pelo cadastro os demais só apenas consulta, muuuuito obrigado pelo feedback de vcs pessoal, mas só ainda nao consegui trazer o codigo para o textbox
-
Você jogou o valor para dentro do textbox:
int NextId = 0; // proximo valor string NameTable = "people"; using (SqlConnection Conn = new SqlConnection(@"Server=.\SQLExpress;Database=myEntities;User Id=sa;Password=senha;")) using (SqlCommand Command = new SqlCommand(string.Format("SELECT IDENT_CURRENT('{0}') + IDENT_INCR('{0}')", NameTable), Conn)) { Conn.Open(); int.TryParse(Command.ExecuteScalar().ToString(), out NextId); Conn.Close(); } Text1.Text = NextId.ToString();
Fulvio C
-
-
Você pode executar esse código na hora que clicar em novo registro e direcionar o valor de NextId para dentro desse TextBox!
Fulvio C
- Marcado como Resposta Aelton Menezes terça-feira, 10 de novembro de 2015 19:40
-