Usuário com melhor resposta
Update no Access 2007 VS2008 não atualiza os campos

Pergunta
-
Tenho uma aplicação da qual tive que, infelizmente migrar para o Access, e estou tendo um problema ao executar um update, por isso peço ajuda a quem puder.
A aplicação esta no VS2008, windows forms e o banco e o Access 2007.
Tenho uma classe q possui um metodo de update a seguir:
bool blnRetorno = false; string strSql = "UPDATE ocupacoes SET ocupacoes.ocupacao=@ocupacao, " + " ocupacoes.tipo=@tipo, ocupacoes.tempo=@tempo " + " WHERE idocupacoes=@idocupacoes"; List<OleDbParameter> objParams = new List<OleDbParameter>(); objParams.Add(new OleDbParameter("@idocupacoes", p_objOcupacoes.idocupacoes)); objParams.Add(new OleDbParameter("@ocupacao", p_objOcupacoes.ocupacao)); objParams.Add(new OleDbParameter("@tipo", p_objOcupacoes.tipo)); objParams.Add(new OleDbParameter("@tempo", p_objOcupacoes.tempo)); blnRetorno = objConn.executarComando(strSql, objParams); return blnRetorno;
o qual executa um metodo de uma outra classe de acesso ao banco, a seguir o metodo:
public bool executarComando(string p_strSql, List<OleDbParameter> p_objParams) { bool blnResult = false; if (!this.conectar()) { return false; } //SqlCommand objCmd = new SqlCommand(p_strSql, objConn); OleDbCommand objCmd = new OleDbCommand(p_strSql, objConn); //foreach (OleDbParameter param in p_objParams) foreach (OleDbParameter param in p_objParams) { objCmd.Parameters.Add(param); } try { <br/> blnResult = (objCmd.ExecuteNonQuery() > 0 ? true : false); } catch (Exception ex) { throw new Exception("" + ex); return false; } this.desconectar(); return blnResult; }
O problema é que ao executar tal codigo não é encontrado nenhum erro no comando ExcecuteNonQuery(), mas ele também não faz o update dos campos.
Alguém me ajuda?
Obrigado!!!
Respostas
-
Andre você como sempre muito prestativo, sempre disposto a ajudar, mas dessa vez eu consegui achar a solução sozinho, depois de fritar um pouco o tico e o teco. A sua solução esta correta, mas não pelo fato da forma da nomeação do parametro e sim na verdade o ocorre com o update no access e que ele não trabalha com parametro nomeado, assim como no SLQServer que basta apenas você nomear ele e colocar na sequência que quiser que o SQLServer trata isso pra você, no access a sequência de parametros deve ser igual a sequencia que ele se seguem na instrução update senão ele não interpreta de forma correta.
De toda forma obrigado pela ajuda!
- Marcado como Resposta FoxWilliamMulder segunda-feira, 18 de outubro de 2010 19:08
Todas as Respostas
-
Prezado,
Acredito que seja porque os parâmetros em OleDb são definidos de uma forma diferente... Na sua query, ao invés de indicá-los com @nome, você deve indicar com ? (ponto de interrogação)... Além disso, deve incluí-los na ordem correta da query:
bool blnRetorno = false; string strSql = "UPDATE ocupacoes SET ocupacoes.ocupacao=?, " + " ocupacoes.tipo=?, ocupacoes.tempo=? " + " WHERE idocupacoes=?"; List<OleDbParameter> objParams = new List<OleDbParameter>(); objParams.Add(new OleDbParameter("ocupacao", p_objOcupacoes.ocupacao)); objParams.Add(new OleDbParameter("tipo", p_objOcupacoes.tipo)); objParams.Add(new OleDbParameter("tempo", p_objOcupacoes.tempo)); objParams.Add(new OleDbParameter("idocupacoes", p_objOcupacoes.idocupacoes)); blnRetorno = objConn.executarComando(strSql, objParams); return blnRetorno;
André Alves de Lima
Visite o meu site: http://www.andrealveslima.com.br
Me siga no Twitter: @andrealveslima -
Andre você como sempre muito prestativo, sempre disposto a ajudar, mas dessa vez eu consegui achar a solução sozinho, depois de fritar um pouco o tico e o teco. A sua solução esta correta, mas não pelo fato da forma da nomeação do parametro e sim na verdade o ocorre com o update no access e que ele não trabalha com parametro nomeado, assim como no SLQServer que basta apenas você nomear ele e colocar na sequência que quiser que o SQLServer trata isso pra você, no access a sequência de parametros deve ser igual a sequencia que ele se seguem na instrução update senão ele não interpreta de forma correta.
De toda forma obrigado pela ajuda!
- Marcado como Resposta FoxWilliamMulder segunda-feira, 18 de outubro de 2010 19:08
-
Prezado,
Magina... Precisando é só falar...
Bons estudos / trabalho por aí...
André Alves de Lima
Visite o meu site: http://www.andrealveslima.com.br
Me siga no Twitter: @andrealveslima