none
Recuperar Id apos um insert RRS feed

  • Pergunta

  • Pessoal preciso de uma ajuda no seguinte.
    Tenho uma aplicação que faz um insert em uma tabela e apenas manda manda dados, quero que apos ele fazer um insert, me retorne para eu guardar em uma variável o campo id da tabela.

    Olhem aplicação o que ela faz só que de forma reduzida.

    protected void btoEnviar_Click(object sender, EventArgs e)
            {
                string str_conecta = "Data Source=.\\SQLEXPRESS; Database=DBHelp;Integrated Security=SSPI;";
                string str_comando = "INSERT INTO TBL_CHAMADOS (ID_EMPRESA,ID_USER,ID_PROBLEMA,DATA,DESCRICAO,IMAGEM,STATUS)"
                                     + "VALUES(@ID_EMPRESA,@ID_USER,@ID_PROBLEMA,@DATA,@DESCRICAO,@IMAGEM,@STATUS)";

                int intTamanho = System.Convert.ToInt32(fileUpload.PostedFile.InputStream.Length);
                byte[] byteImagem = new byte[intTamanho];
                fileUpload.PostedFile.InputStream.Read(byteImagem, 0, intTamanho);

                SqlConnection con = new SqlConnection(str_conecta);
                try
                {
                    SqlCommand comando = new SqlCommand(str_comando, con);
                    comando.Parameters.Add(new SqlParameter("@ID_EMPRESA",Session["ID_EMPRESA"]));
                    comando.Parameters.Add(new SqlParameter("@ID_USER",Session["ID_USER"]));
                    comando.Parameters.Add(new SqlParameter("@ID_PROBLEMA",dropAssunto.SelectedValue));
                    comando.Parameters.Add(new SqlParameter("@DATA",System.DateTime.Now));
                    comando.Parameters.Add(new SqlParameter("@DESCRICAO",txtProblema.Text));
                    comando.Parameters.Add(new SqlParameter("@STATUS","1"));
                    SqlParameter parametro = new SqlParameter("@IMAGEM", SqlDbType.Image);
                    parametro.Value = byteImagem;
                    comando.Parameters.Add(parametro);

                    con.Open();
                    comando.ExecuteNonQuery();
                    limpaDados();
                    lblMensagem.Text = "Chamado aberto com sucesso!!";
                   

                }
                catch (Exception err)
                {
                    Response.Write(err.Message);
                }
                finally
                {
                    if (con.State == ConnectionState.Open)
                        con.Close();
                }
            }


    Como é um insert e o campo ID_CHAMADO é auto incrmentado, claro que não esta ai.
    Bom eu preciso apos ele fazer este insert me retornar qual é o id da operação para eu mostrar em uma função.
    Algo assim.


    int ID = resultado da consulta.
    Podem me ajudar?

    quarta-feira, 3 de março de 2010 16:58

Respostas

  • Maciel A.F, fiz uma modificações no seu código, veja se isto ajuda:

    protected void btoEnviar_Click(object sender, EventArgs e)
            {
                //Declara o inteiro que receberá o Novo ID
    int NovoID = 0
    //Define o comando de inserção com o Select @@Identity no final

    string str_conecta = "Data Source=.\\SQLEXPRESS; Database=DBHelp;Integrated Security=SSPI;"; string str_comando = "INSERT INTO TBL_CHAMADOS (ID_EMPRESA,ID_USER,ID_PROBLEMA,DATA,DESCRICAO,IMAGEM,STATUS)" + "VALUES(@ID_EMPRESA,@ID_USER,@ID_PROBLEMA,@DATA,@DESCRICAO,@IMAGEM,@STATUS) SELECT @@Identity"; int intTamanho = System.Convert.ToInt32(fileUpload.PostedFile.InputStream.Length); byte[] byteImagem = new byte[intTamanho]; fileUpload.PostedFile.InputStream.Read(byteImagem, 0, intTamanho); SqlConnection con = new SqlConnection(str_conecta); try { SqlCommand comando = new SqlCommand(str_comando, con); comando.Parameters.Add(new SqlParameter("@ID_EMPRESA",Session["ID_EMPRESA"])); comando.Parameters.Add(new SqlParameter("@ID_USER",Session["ID_USER"])); comando.Parameters.Add(new SqlParameter("@ID_PROBLEMA",dropAssunto.SelectedValue)); comando.Parameters.Add(new SqlParameter("@DATA",System.DateTime.Now)); comando.Parameters.Add(new SqlParameter("@DESCRICAO",txtProblema.Text)); comando.Parameters.Add(new SqlParameter("@STATUS","1")); SqlParameter parametro = new SqlParameter("@IMAGEM", SqlDbType.Image); parametro.Value = byteImagem; comando.Parameters.Add(parametro); con.Open();
    //Aciona o ExecuteScalar que retorna o valor do Novo ID NovoID = Convert.ToInt32(comando.ExecuteScalar()); limpaDados(); lblMensagem.Text = "Chamado aberto com sucesso!!"; } catch (Exception err) { Response.Write(err.Message); } finally { if (con.State == ConnectionState.Open) con.Close(); } }

    []s.

    Alan. Twitter
    • Marcado como Resposta Maciel Alves quarta-feira, 3 de março de 2010 19:14
    quarta-feira, 3 de março de 2010 17:05

Todas as Respostas

  • Maciel A.F, fiz uma modificações no seu código, veja se isto ajuda:

    protected void btoEnviar_Click(object sender, EventArgs e)
            {
                //Declara o inteiro que receberá o Novo ID
    int NovoID = 0
    //Define o comando de inserção com o Select @@Identity no final

    string str_conecta = "Data Source=.\\SQLEXPRESS; Database=DBHelp;Integrated Security=SSPI;"; string str_comando = "INSERT INTO TBL_CHAMADOS (ID_EMPRESA,ID_USER,ID_PROBLEMA,DATA,DESCRICAO,IMAGEM,STATUS)" + "VALUES(@ID_EMPRESA,@ID_USER,@ID_PROBLEMA,@DATA,@DESCRICAO,@IMAGEM,@STATUS) SELECT @@Identity"; int intTamanho = System.Convert.ToInt32(fileUpload.PostedFile.InputStream.Length); byte[] byteImagem = new byte[intTamanho]; fileUpload.PostedFile.InputStream.Read(byteImagem, 0, intTamanho); SqlConnection con = new SqlConnection(str_conecta); try { SqlCommand comando = new SqlCommand(str_comando, con); comando.Parameters.Add(new SqlParameter("@ID_EMPRESA",Session["ID_EMPRESA"])); comando.Parameters.Add(new SqlParameter("@ID_USER",Session["ID_USER"])); comando.Parameters.Add(new SqlParameter("@ID_PROBLEMA",dropAssunto.SelectedValue)); comando.Parameters.Add(new SqlParameter("@DATA",System.DateTime.Now)); comando.Parameters.Add(new SqlParameter("@DESCRICAO",txtProblema.Text)); comando.Parameters.Add(new SqlParameter("@STATUS","1")); SqlParameter parametro = new SqlParameter("@IMAGEM", SqlDbType.Image); parametro.Value = byteImagem; comando.Parameters.Add(parametro); con.Open();
    //Aciona o ExecuteScalar que retorna o valor do Novo ID NovoID = Convert.ToInt32(comando.ExecuteScalar()); limpaDados(); lblMensagem.Text = "Chamado aberto com sucesso!!"; } catch (Exception err) { Response.Write(err.Message); } finally { if (con.State == ConnectionState.Open) con.Close(); } }

    []s.

    Alan. Twitter
    • Marcado como Resposta Maciel Alves quarta-feira, 3 de março de 2010 19:14
    quarta-feira, 3 de março de 2010 17:05
  • Cara deu certo, na mosca.
    Valeu!
    quarta-feira, 3 de março de 2010 19:14