none
ERRO NO UPDATE RRS feed

  • Pergunta

  • Oi Amigos,

    estou fazendo uma pequena aplicação em Asp.net e C# mas, não consigo fazer a implementação da UPDATE funcionar, explico abaixo e posto o código:

    Esse é um método que altera os dados de uma solicitação de serviços, na realidade não dá nenhum erro, simplesmente o método é executado mas não dá o UPDATE na tabela.
     
    Eu faço um SQL parametrizado e quando executa o comando "objCommand.ExecuteNonQuery(); " não acontece nada, ou seja, não dá nenhum erro, mas também não atualiza a tabela. Por isso gostaria de alguma luz se estou fazendo algo de errado ou se está faltando alguma coisa.
     
    Obs.: Quando coloco um breakpoint e vou debugando eu consigo ver que as variáveis recebem os valores certinho mas quando é executado o comando não acontece nada no BD.
    public void AlterarSolicitacaoServicos(Model.MSolicitacaoServicos objMSolicitacaoServicos)
            {
                //Cria os Objetos
                StringBuilder objStr = null;
                OleDbCommand objCommand = null;
                OleDbConnection objConnection = null;
                AcessoBD objAcessoBD = new AcessoBD();
                objConnection = objAcessoBD.AbreConexao();
                
                try
                {
                    objStr = new StringBuilder();
                    objStr.Append("UPDATE OPE_SOLICITACAO_SERVICOS ");
                    objStr.Append("SET SOS_FKY_STS_IDE = @sos_fky_sts_ide, SOS_FKY_USU_IDE = @sos_fky_usu_ide, ");
                    objStr.Append("SOS_FKY_CLI_IDE = @sos_fky_cli_ide, SOS_DSC = @sos_dsc, SOS_NOM = @sos_nom ");
                    objStr.Append("WHERE SOS_IDE = @sos_ide");
                    objCommand = new OleDbCommand(objStr.ToString(), objConnection);
                    objCommand.Parameters.Add(new OleDbParameter("@sos_fky_sts_ide", objMSolicitacaoServicos.FlagStatusID));
                    objCommand.Parameters.Add(new OleDbParameter("@sos_ide", objMSolicitacaoServicos.ID));
                    objCommand.Parameters.Add(new OleDbParameter("@sos_fky_usu_ide", objMSolicitacaoServicos.ObjMGrupoUsuario.ID));
                    objCommand.Parameters.Add(new OleDbParameter("@sos_fky_cli_ide", objMSolicitacaoServicos.ObjMPessoa.ID));
                    objCommand.Parameters.Add(new OleDbParameter("@sos_dsc", objMSolicitacaoServicos.Descricao));
                    objCommand.Parameters.Add(new OleDbParameter("@sos_nom", objMSolicitacaoServicos.NomeSolicitServico));
                    //Executa o Comando
                    objCommand.ExecuteNonQuery();
                }
                catch
                {
                    throw;
                }
                finally
                {
                    objConnection.Close();
                    objConnection.Dispose();
                    objAcessoBD = null;
                }
            }


    Bruce Wayne Systems Analyst "Até um Gênio tem que aprender tudo que já sabe" http://adilsonbenevides.spaces.live.com/ http://adilsonbenevides.blogspot.com/ http://adilsonbenevidessobral.blogspot.com/ http://teologiaarainhadasciencias.ning.com/ http://twitter.com/adilsonbenny
    domingo, 8 de novembro de 2009 18:24

Respostas

  • Caro Wlliam,

    Desculpa a demora pra responder, estava tentando solucionar o problema e usei a sua dica mas, não funcionou...
    revi tudo e talvez possa ser a ligação e chamada de métodos das outras classes que não esteja correta por isso,
    resolvi fazer tudo do zero...
    agradeço o seu apoio aki e interesse em me ajudar bem como o Seilor e os demais...
    abração...assim que atualizar as mudanças eu volto...


    Bruce Wayne Systems Analyst "Até um Gênio tem que aprender tudo que já sabe" http://adilsonbenevides.spaces.live.com/, http://adilsonbenevides.blogspot.com/, http://adilsonbenevidessobral.blogspot.com/, http://teologiaarainhadasciencias.ning.com/, http://twitter.com/adilsonbenny
    • Marcado como Resposta Harley Araujo quinta-feira, 3 de dezembro de 2009 17:59
    segunda-feira, 16 de novembro de 2009 11:16

Todas as Respostas

  • Tenta por isso

    objCommand.CommandType = System.Data.CommandType.Text; 

    segunda-feira, 9 de novembro de 2009 11:10
    Moderador
  • Fale,

     

    Complementando o Seilor, se você quizer utilizar StoredProcedure você faz assim:

     

    objCommand.CommandType = System.Data.CommandType.StoredProcedure;

     

    Abraço!


    Se a resposta solucionar sua dúvida, favor - Votar como Útil Abraço!
    segunda-feira, 9 de novembro de 2009 11:44
  • Caros Seilor e Erisson,

    Não consegui mudanças na execução do código com a linha

    objCommand.CommandType = System.Data.CommandType.Text; 
    ele executa mas, não mostra mensagem de erro, nem faz UPDATE do Banco de Dados. Poderiam sugerir outra ação?
    meu codigo ficou assim:

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Collections;
    using System.Data;
    using System.Data.OleDb;
    
    namespace Data
    {
        public class DSolicitacaoServicos
        {
            public DSolicitacaoServicos()
            {}
    
            public Model.MSolicitacaoServicos[] ListarSolicitacaoServicos()
            {
               //Cria os Objetos
                StringBuilder objStr = null;
                DataSet objDs = null;
                OleDbCommand objCommand = null;
                OleDbConnection objConnection = new OleDbConnection();
                OleDbDataAdapter objDa = null;
                AcessoBD objAcessoBD = new AcessoBD();
                Model.MSolicitacaoServicos[] objArrOut = null;
                Model.MSolicitacaoServicos objInfo = null;
                objConnection = objAcessoBD.AbreConexao();
    
                try
                {
                    objDs = new DataSet();
                    objStr = new StringBuilder();
                    objStr.Append("SELECT OPE_SOLICITACAO_SERVICOS.SOS_IDE, CAD_CLIENTES.CLI_NOM, ");
                    objStr.Append("CAD_USUARIOS.USU_NOM, OPE_SOLICITACAO_SERVICOS.SOS_DSC, ");
                    objStr.Append("OPE_SOLICITACAO_SERVICOS.SOS_NOM, OPE_SOLICITACAO_SERVICOS.SOS_QEM, ");
                    objStr.Append("OPE_SOLICITACAO_SERVICOS.SOS_QDO, OPE_STATUS_SOLICITACAO.STS_STA ");
                    objStr.Append("FROM ((OPE_SOLICITACAO_SERVICOS INNER JOIN CAD_CLIENTES ");
                    objStr.Append("ON CAD_CLIENTES.CLI_IDE = OPE_SOLICITACAO_SERVICOS.SOS_FKY_CLI_IDE) ");
                    objStr.Append("INNER JOIN CAD_USUARIOS ON OPE_SOLICITACAO_SERVICOS.SOS_FKY_USU_IDE = ");
                    objStr.Append("CAD_USUARIOS.USU_IDE) ");
                    objStr.Append("INNER JOIN OPE_STATUS_SOLICITACAO ON OPE_STATUS_SOLICITACAO.STS_IDE = ");
                    objStr.Append("OPE_SOLICITACAO_SERVICOS.SOS_FKY_STS_IDE");
                    objCommand = new OleDbCommand(objStr.ToString(), objConnection);
                    objDa = new OleDbDataAdapter(objCommand);
                    objDa.Fill(objDs);
                    if ((objDs != null) && (objDs.Tables != null) && (objDs.Tables.Count == 1) && (objDs.Tables[0].Rows.Count > 0))
                    {
                        objArrOut = new Model.MSolicitacaoServicos[objDs.Tables[0].Rows.Count];
                        for (int i = 0; i < objDs.Tables[0].Rows.Count; i++)
                        {
                            DataRow objRow = objDs.Tables[0].Rows[i];
                            objInfo = new Model.MSolicitacaoServicos();
                            objInfo.ID = Convert.ToInt32(objRow["SOS_IDE"]);
                            objInfo.ObjMPessoa.Nome = objRow["CLI_NOM"].ToString();
                            objInfo.ObjMGrupoUsuario.Nome = objRow["USU_NOM"].ToString();
                            objInfo.NomeSolicitServico = objRow["SOS_NOM"].ToString();
                            objInfo.FlagStatus = objRow["STS_STA"].ToString();
                            objArrOut[i] = objInfo;
                        }
                        return (objArrOut);
                    }
                    else
                    {
                        return null;
                    }
                }
                catch
                {
                    throw;
                }
                finally
                {
                    objConnection.Close();
                    objConnection.Dispose();
                    objAcessoBD = null;    
                }
            }
    
            public Model.MSolicitacaoServicos ListarSolicitacaoServicosAlteracao(Model.MSolicitacaoServicos objMSolicitacaoServicos)
            {
                //Cria os Objetos
                StringBuilder objStr = null;
                DataSet objDs = null;
                OleDbCommand objCommand = null;
                OleDbConnection objConnection = new OleDbConnection();
                OleDbDataAdapter objDa = null;
                AcessoBD objAcessoBD = new AcessoBD();
                Model.MSolicitacaoServicos objInfo = null;
                objConnection = objAcessoBD.AbreConexao();
                
                try
                {
                    objDs = new DataSet();
                    objStr = new StringBuilder();
                    objStr.Append("SELECT SOS_IDE, SOS_FKY_USU_IDE, SOS_FKY_CLI_IDE, SOS_DSC, SOS_NOM, SOS_FKY_STS_IDE ");
                    objStr.Append("FROM OPE_SOLICITACAO_SERVICOS ");
                    objStr.Append("WHERE SOS_IDE = @sos_ide");
                    objCommand = new OleDbCommand(objStr.ToString(), objConnection);
                    objCommand.Parameters.Add(new OleDbParameter("@sos_ide", objMSolicitacaoServicos.ID));
                    objDa = new OleDbDataAdapter(objCommand);
                    objDa.Fill(objDs);
                    if ((objDs != null) && (objDs.Tables != null) && (objDs.Tables.Count == 1) && (objDs.Tables[0].Rows.Count > 0))
                    {
                        for (int i = 0; i < objDs.Tables[0].Rows.Count; i++)
                        {
                            DataRow objRow = objDs.Tables[0].Rows[i];
                            objInfo = new Model.MSolicitacaoServicos();
                            objInfo.ID = Convert.ToInt32(objRow["SOS_IDE"]);
                            objInfo.NomeSolicitServico = objRow["SOS_NOM"].ToString();
                            objInfo.ObjMPessoa.ID = Convert.ToInt32(objRow["SOS_FKY_CLI_IDE"].ToString());
                            objInfo.ObjMGrupoUsuario.ID = Convert.ToInt32(objRow["SOS_FKY_USU_IDE"].ToString());
                            objInfo.Descricao = objRow["SOS_DSC"].ToString();
                            objInfo.FlagStatusID = Convert.ToInt32(objRow["SOS_FKY_STS_IDE"].ToString());
                        }
                        return (objInfo);
                    }
                    else
                    {
                        return null;
                    }
                }
                catch
                {
                    throw;
                }
                finally
                {
                    objConnection.Close();
                    objConnection.Dispose();
                    objAcessoBD = null;
                }
            }
    
            public void IncluirSolicitacaoServicos(Model.MSolicitacaoServicos objMSolicitacaoServicos, String strLogin)
            {
                StringBuilder objStr = null;
                OleDbCommand objCommand = null;
                OleDbConnection objConnection = null;
                AcessoBD objAcessoBD = new AcessoBD();
                objConnection = objAcessoBD.AbreConexao();
                
                try
                {
                    objStr = new StringBuilder();
                    objStr.Append("INSERT INTO OPE_SOLICITACAO_SERVICOS ");
                    objStr.Append("(SOS_FKY_USU_IDE, SOS_FKY_CLI_IDE, SOS_DSC, ");
                    objStr.Append("SOS_NOM , SOS_QEM, SOS_QDO, SOS_FKY_STS_IDE) ");
                    objStr.Append("VALUES ");
                    objStr.Append("(@sos_fky_usu_ide, @sos_fky_cli_ide, @sos_dsc, ");
                    objStr.Append("@sos_nom , @sos_qem, @sos_qdo, @sos_fky_sts_ide)");
                    objCommand = new OleDbCommand(objStr.ToString(), objConnection);
                    objCommand.Parameters.Add(new OleDbParameter("@sos_fky_usu_ide", objMSolicitacaoServicos.ObjMGrupoUsuario.ID));
                    objCommand.Parameters.Add(new OleDbParameter("@sos_fky_cli_ide", objMSolicitacaoServicos.ObjMPessoa.ID));
                    objCommand.Parameters.Add(new OleDbParameter("@sos_dsc", objMSolicitacaoServicos.Descricao));
                    objCommand.Parameters.Add(new OleDbParameter("@sos_nom", objMSolicitacaoServicos.NomeSolicitServico));
                    objCommand.Parameters.Add(new OleDbParameter("@sos_qem", strLogin));
                    objCommand.Parameters.Add(new OleDbParameter("@sos_qdo", Convert.ToString(DateTime.Now)));
                    objCommand.Parameters.Add(new OleDbParameter("@sos_fky_sts_ide", objMSolicitacaoServicos.FlagStatusID));
                    objCommand.ExecuteNonQuery();
                }
                catch
                {
                    throw;
                }
                finally
                {
                    objConnection.Close();
                    objConnection.Dispose();
                    objAcessoBD = null;
                }
            }
    
            public void AlterarSolicitacaoServicos(Model.MSolicitacaoServicos objMSolicitacaoServicos)
            {
                //Cria os Objetos
                StringBuilder objStr = null;
                OleDbCommand objCommand = new OleDbCommand();
                OleDbConnection objConnection = new OleDbConnection();
                AcessoBD objAcessoBD = new AcessoBD();
                objConnection = objAcessoBD.AbreConexao();
                
                try
                {
                    objStr = new StringBuilder();
                    objStr.Append("UPDATE OPE_SOLICITACAO_SERVICOS ");
                    objStr.Append("SET SOS_FKY_STS_IDE = @sos_fky_sts_ide, SOS_FKY_USU_IDE = @sos_fky_usu_ide, ");
                    objStr.Append("SOS_FKY_CLI_IDE = @sos_fky_cli_ide, SOS_DSC = @sos_dsc, SOS_NOM = @sos_nom ");
                    objStr.Append("WHERE SOS_IDE = @sos_ide");
                    //objCommand = new OleDbCommand(objStr.ToString(), objConnection);
                    objCommand.Connection = objConnection;
                    objCommand.CommandText = objStr.ToString();
                    objCommand.CommandType = CommandType.Text;
    
                    objCommand.Parameters.Add(new OleDbParameter("@sos_fky_sts_ide", objMSolicitacaoServicos.FlagStatusID));
                    objCommand.Parameters.Add(new OleDbParameter("@sos_ide", objMSolicitacaoServicos.ID));
                    objCommand.Parameters.Add(new OleDbParameter("@sos_fky_usu_ide", objMSolicitacaoServicos.ObjMGrupoUsuario.ID));
                    objCommand.Parameters.Add(new OleDbParameter("@sos_fky_cli_ide", objMSolicitacaoServicos.ObjMPessoa.ID));
                    objCommand.Parameters.Add(new OleDbParameter("@sos_dsc", objMSolicitacaoServicos.Descricao));
                    objCommand.Parameters.Add(new OleDbParameter("@sos_nom", objMSolicitacaoServicos.NomeSolicitServico));
                    
                    //Executa o Comando
                    objCommand.ExecuteNonQuery();
                }
                catch
                {
                    throw;
                }
                finally
                {
                    objConnection.Close();
                    objConnection.Dispose();
                    objAcessoBD = null;
                }
            }
        }
    }

    Bruce Wayne Systems Analyst "Até um Gênio tem que aprender tudo que já sabe" http://adilsonbenevides.spaces.live.com/, http://adilsonbenevides.blogspot.com/, http://adilsonbenevidessobral.blogspot.com/, http://teologiaarainhadasciencias.ning.com/, http://twitter.com/adilsonbenny
    quinta-feira, 12 de novembro de 2009 22:36
  • Agradeço a colaboração de vcs, ainda estou procurando uma solução para o problema do meu UPDATE por isso desmarquei as respostas...
    Bruce Wayne Systems Analyst "Até um Gênio tem que aprender tudo que já sabe" http://adilsonbenevides.spaces.live.com/, http://adilsonbenevides.blogspot.com/, http://adilsonbenevidessobral.blogspot.com/, http://teologiaarainhadasciencias.ning.com/, http://twitter.com/adilsonbenny
    quinta-feira, 12 de novembro de 2009 22:37
  • Pode não ser o caso, mas por via das dúvidas verique sua string de conexão, se ela está apontando para a instância correta e se o usuário sql consegue dar update no(s) banco(s) correspondente(s).

    Esse é um começo,
    "Muito mais crucial do que aquilo que sabemos ou deixamos de saber é aquilo que não queremos saber." (Eric Hoffer)
    sexta-feira, 13 de novembro de 2009 03:27
  • Olá

    Se vc esta usando Oledb Data Provider vc nao pode usar parametros nomeados (@field). Voce tem que usar o ? e definir ops parametros na ordem.

    Olhe mais em:
    http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbparameter.aspx
    The OLE DB.NET Framework Data Provider uses positional parameters that are marked with a question mark (?) instead of named parameters.

    Seu update tem que ser escrito assim:

    objStr.Append("UPDATE OPE_SOLICITACAO_SERVICOS "
    );
    objStr.Append("SET SOS_FKY_STS_IDE = ?, SOS_FKY_USU_IDE = ?, " );
    objStr.Append("SOS_FKY_CLI_IDE = ?, SOS_DSC = ?, SOS_NOM = ? " );
    objStr.Append("WHERE SOS_IDE = ?" );
    e a definição de parametros:
    objCommand.Parameters.Add(new
     OleDbParameter("@sos_fky_sts_ide"
    , objMSolicitacaoServicos.FlagStatusID));
    objCommand.Parameters.Add(new OleDbParameter("@sos_fky_usu_ide" , objMSolicitacaoServicos.ObjMGrupoUsuario.ID));
    objCommand.Parameters.Add(new OleDbParameter("@sos_fky_cli_ide" , objMSolicitacaoServicos.ObjMPessoa.ID));
    objCommand.Parameters.Add(new OleDbParameter("@sos_dsc" , objMSolicitacaoServicos.Descricao));
    objCommand.Parameters.Add(new OleDbParameter("@sos_nom" , objMSolicitacaoServicos.NomeSolicitServico));
    objCommand.Parameters.Add(new OleDbParameter("@sos_ide" , objMSolicitacaoServicos.ID));
    Note que o @filed não quer dizer nada... se vc quisesse escrever @banana, vai funcionar do mesmo jeito. O imporante é a sequencia na ordem certa.


    Se vc quiser usar parametros nomeados, entel tem que usar o SQLClient ou o ORACLECLient, ou outro dataprovider que de suporte a parametros nomeados.

    Att
    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    SOGI INFORMATIQUE LTÉE (http://www.sogi.com)
    sexta-feira, 13 de novembro de 2009 03:46
    Moderador
  • A sugestao acima resolveu seu problema?

    att

    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    SOGI INFORMATIQUE LTÉE (http://www.sogi.com)
    sexta-feira, 13 de novembro de 2009 20:58
    Moderador
  • Caro Wlliam,

    Desculpa a demora pra responder, estava tentando solucionar o problema e usei a sua dica mas, não funcionou...
    revi tudo e talvez possa ser a ligação e chamada de métodos das outras classes que não esteja correta por isso,
    resolvi fazer tudo do zero...
    agradeço o seu apoio aki e interesse em me ajudar bem como o Seilor e os demais...
    abração...assim que atualizar as mudanças eu volto...


    Bruce Wayne Systems Analyst "Até um Gênio tem que aprender tudo que já sabe" http://adilsonbenevides.spaces.live.com/, http://adilsonbenevides.blogspot.com/, http://adilsonbenevidessobral.blogspot.com/, http://teologiaarainhadasciencias.ning.com/, http://twitter.com/adilsonbenny
    • Marcado como Resposta Harley Araujo quinta-feira, 3 de dezembro de 2009 17:59
    segunda-feira, 16 de novembro de 2009 11:16