Usuário com melhor resposta
Como pegar o último ID cadastrado na tabela

Pergunta
-
Boa Tarde Pessoal,
Como eu faço para pegar o último ID que foi cadastrado no banco de dados e se eu preciso alterar algo na minha tabela.
Hoje eu tenho a seguinte função que cadastra:
public bool incluir(Cliente p_objCliente) { bool blnRetorno = false; string strSQL = "INSERT INTO Cliente (ID, Nome, DataCadastro, CNPJ) VALUES (@PID, @pNome, @pDataCadastro, @pCNPJ)"; List<SqlParameter> objParam = new List<SqlParameter>(); objParam.Add(new SqlParameter("@pID", p_objCliente.ID)); objParam.Add(new SqlParameter("@pNome", p_objCliente.Nome)); objParam.Add(new SqlParameter("@pDataCadastro", p_objCliente.DataCadastro)); objParam.Add(new SqlParameter("@pCNPJ", p_objCliente.CNPJ)); blnRetorno = objConnManager.executarComando(strSQL, objParam); return blnRetorno; }
Vlw Pessoal
[]'s
- Movido Seilor Bonancio JuniorModerator quinta-feira, 8 de novembro de 2012 16:06 (De:ASP.NET)
- Movido Roberson Ferreira _ segunda-feira, 19 de novembro de 2012 13:11 Dúvida não é propriamente de SQL. (De:SQL Server - Desenvolvimento Geral)
Respostas
-
Olá Alan. Com uma pequena alteração em sua instrução, voce consegue recuperar o ID do registro. Vale lembrar que deve haver uma coluna definida como PrimaryKey em sua tabela.
Pelo seu código acima, dá para ver que voce usa objetos que voce criou para manipular o seu banco, por isso vou postar o codigo nativo do SqlClient e voce adapta para seu objeto.
string connectionString = "sua string de conexao com o banco"; using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); string strSQL = "INSERT INTO Cliente (ID, Nome, DataCadastro, CNPJ) VALUES (@PID, @pNome, @pDataCadastro, @pCNPJ) "; strSQL += ";" strSQL += "SELECT SCOPE_IDENTITY()" using (SqlCommand command = new SqlCommand(strSQL, connection)) { command.Parameters.Add(new SqlParameter("@pID", p_objCliente.ID)); command.Parameters.Add(new SqlParameter("@pNome", p_objCliente.Nome)); command.Parameters.Add(new SqlParameter("@pDataCadastro", p_objCliente.DataCadastro)); command.Parameters.Add(new SqlParameter("@pCNPJ", p_objCliente.CNPJ)); int ultimoID = command.ExecteScalar(); } }
Abraços.
Washington Luíz | MCP, MCTS
O Senhor é minha força e somente Nele confio.- Marcado como Resposta Gustavo M. GuimarãesModerator quinta-feira, 13 de dezembro de 2012 18:05
Todas as Respostas
-
Olá Alan. Com uma pequena alteração em sua instrução, voce consegue recuperar o ID do registro. Vale lembrar que deve haver uma coluna definida como PrimaryKey em sua tabela.
Pelo seu código acima, dá para ver que voce usa objetos que voce criou para manipular o seu banco, por isso vou postar o codigo nativo do SqlClient e voce adapta para seu objeto.
string connectionString = "sua string de conexao com o banco"; using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); string strSQL = "INSERT INTO Cliente (ID, Nome, DataCadastro, CNPJ) VALUES (@PID, @pNome, @pDataCadastro, @pCNPJ) "; strSQL += ";" strSQL += "SELECT SCOPE_IDENTITY()" using (SqlCommand command = new SqlCommand(strSQL, connection)) { command.Parameters.Add(new SqlParameter("@pID", p_objCliente.ID)); command.Parameters.Add(new SqlParameter("@pNome", p_objCliente.Nome)); command.Parameters.Add(new SqlParameter("@pDataCadastro", p_objCliente.DataCadastro)); command.Parameters.Add(new SqlParameter("@pCNPJ", p_objCliente.CNPJ)); int ultimoID = command.ExecteScalar(); } }
Abraços.
Washington Luíz | MCP, MCTS
O Senhor é minha força e somente Nele confio.- Marcado como Resposta Gustavo M. GuimarãesModerator quinta-feira, 13 de dezembro de 2012 18:05
-
-
Ola Alan.
Ai depende de sua implementação. Se o seu metodo executarComando já fizer o teste se o ID recuperado é maior que zero, então não precisa alterar o tipo. Como falei, o código que passei usa os objetos nativos do .NET.
Voce pode fazer todos os tratamentos dentro do seu metodo executarComando. Neste caso, o seu codigo do post não sofreria nenhuma alteração, somente o codigo do metodo executarComando.
Abraços.
Washington Luíz | MCP, MCTS
O Senhor é minha força e somente Nele confio. -
Amigo,
Como o seu método retorna um booleano mudar ele pode implicar em outras partes da aplicação, então nesse caso você teria que criar uma nova chamada logo após o seu INSERT só que nesse caso pegando as informações do banco, ex:
public int ultimoID() { int retorno = 0; string strSQL = "SELECT SCOPE_IDENTITY()"; //na linha abaixo você precisa chamar o método/função que retorna as informações do banco blnRetorno = objConnManager._EXECUTAR_COMANDO_RETORNAR_VALOR(strSQL); return retorno; }
Seria algo mais ou menos como o código acima.
Espero ter ajudado e boa sorte!
Não esqueça de marcar como útil uma resposta que te ajude.
"A diversão é a alma do negócio"- Sugerido como Resposta Seilor Bonancio JuniorModerator quarta-feira, 21 de novembro de 2012 10:42
-
Vlw Pessoal
Então minha função é executarComando é:
public bool executarComando(string p_strSql, List<SqlParameter> p_obParams) { bool blnresult = false; if (!this.conectar()) { return false; } SqlCommand objCmd = new SqlCommand(p_strSql, objConn); foreach (SqlParameter param in p_obParams) { objCmd.Parameters.Add(param); } try { blnresult = (objCmd.ExecuteNonQuery() > 0 ? true : false); } catch { blnresult = false; } this.desconectar(); return blnresult; }
Vlw
-
Você vai precisar criar um novo método para retornar um INT com o último ID inserido, utilizando a técnica SCALAR que já foi citada, ou retornar um DataTable com as informações, aconselho essa última pois dessa forma você pode re-utilizar ela futuramente para outros fins.
Não esqueça de marcar como útil uma resposta que te ajude.
"A diversão é a alma do negócio" -
-
Isso mesmo...pois um você já tem que retorna um bool quando executa o método e o outro deve retornar um datatable, que eu aconselho, ou um int com o último id.
Espero ter ajudado e não se esqueça de marcar as respostas que te ajudaram.
Boa sorte!
Não esqueça de marcar como útil uma resposta que te ajude.
"A diversão é a alma do negócio" -
Vou retornar a Thread para o fórum ASP.NET pois pelo que entendi a dúvida do Alan não é em relação a banco de dados: ao contrário, ele já sabe qual comando usar (SCOPE_IDENTITY) para resgatar o último ID cadastrado.
No decorrer da discussão, o que foi colocado em pauta é se deveria ser criado ou não um novo método para retornar a informação desejada, mas dentro da programação.
Alan, qualquer dúvida em relação ao SQL Server, por favor, nos acione.
Roberson Ferreira - Database Developer
Acesse: www.robersonferreira.com.br
Email: contato@robersonferreira.com.brSe esta sugestão for útil, por favor, classifique-a como útil.
Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.