Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

daniel.cafonso

[Resolvido] UPDATE não funciona (Asp.Net 3.5 e Access 2007)

Recommended Posts

Olá pessoal, tudo bem?

 

Tenho um Website em Asp.Net 3.5 (VS2008) com Access 2007 que não funciona o UPDATE.

No BD, tenho a seguinte consulta (strored procedure):

UPDATE tb_Funcionarios SET nomeFuncionario = nome, docFuncionario = cpf, codRegistro = numeroFuncionario
WHERE IdFuncionario = IdFuncionario 

E no VS2008, tenho o seguinte código (uso dessa forma com sucesso para Select e Insert):

'define o objeto conexao e obtem a string de conexao do arquivo web.config
Dim conn As OleDbConnection = New OleDbConnection(ConfigurationManager.ConnectionStrings("conexaoBD").ToString())
Dim IdFuncionario As Integer = Session("IdFuncionario")

'define a stored procedure que sera executada
Dim cmd As OleDbCommand = New OleDbCommand("sp_AtualizaFuncionario", conn)
cmd.CommandType = CommandType.StoredProcedure

'define os parametros da stored procedure
Dim paramIdFuncionario As New OleDbParameter
Dim paramNomeFuncionario As New OleDbParameter
Dim paramDocFuncionario As New OleDbParameter
Dim paramCodRegistro As New OleDbParameter

'define o tipo e atribui o valor para cada parametro
With paramIdFuncionario 
    .ParameterName = "IdFuncionario"
    .OleDbType = OleDbType.Integer
    .Value = IdFuncionario
End With
cmd.Parameters.Add(paramIdFuncionario)

With paramNomeFuncionario 
    .ParameterName = "nome"
    .OleDbType = OleDbType.VarChar
    .Value = Me.txtNome.Text
End With
cmd.Parameters.Add(paramNomeFuncionario)

With paramDocFuncionario
    .ParameterName = "cpf"
    .OleDbType = OleDbType.VarChar
    .Value = Me.txtCPF.Text
End With
cmd.Parameters.Add(paramDocFuncionario)

With paramCodRegistro
    .ParameterName = "numeroFuncionario"
    .OleDbType = OleDbType.VarChar
    .Value = Me.txtRegistro.Text
End With
cmd.Parameters.Add(paramCodRegistro)

Try
    'abre a conexao e executa a stored procedure
    conn.Open()
    cmd.ExecuteNonQuery()
Catch ex As Exception
    Me.ClientScript.RegisterStartupScript(Me.[GetType](), "xx", "alert(""Ocorreram problemas no envio do cadastro.\n Erro: " + ex.Message + """)", True)
    conn.Close()
    Exit Sub
Finally
    If conn.State = ConnectionState.Open Then
        conn.Close()
    End If
End Try

O que estou fazendo de errado?

Obrigado,

 

 

Daniel Afonso

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá quintelab, beleza?

 

Usando a aplicação do jeito que postei anteriormente, não dá erro nenhum, mas não atualiza.

Eu debuguei e o "cmd.ExecuteNonQuery()" roda certinho, não dá nenhuma Exception.

 

Bom, depois de vários testes, eu usei o wizard para gerar uma procedure de UPDATE do Access.

Veja como ela gerou:

UPDATE tb_Funcionarios SET tb_Funcionarios.nomeFuncionario = [@nome], 
                           tb_Funcionarios.docFuncionario = [@cpf], 
                           tb_Funcionarios.codRegistro = numeroFuncionario
WHERE (((IdFuncionario) = [IdFuncionario])); 

Veja que nos campos do tipo "String", ele insere o nome do parâmetro entre "[@parametro]" e

no do tipo "Integer", apenas o parâmetro. Ex: numeroFuncionario.

Ao rodar essa procedure direto no Access, ele aparece um campo para eu colocar os devidos

valores, mas ele atualiza tudo errado! :huh:

Coloca o nome no CPF, ou seja, inverte os parâmetros. E ao tentar o UPDATE pelo site,

dá o erro: Data type mismatch in criteria expression.

 

Alguma dica para isso? Vi vários casos com esse mesmo problema, mas eram com Datas.

 

Obrigado,

 

 

Daniel Afonso

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça o teste sem usar parâmetros, concatene os valor a uma única string e execute com o ExecuteNonQuery.

 

Abraços...

 

 

quintelab,

 

Vou tentar fazer isso, mas não tenho como fazer agora, pois estou em outro projeto.

Farei a noite e posto aqui se está tudo OK. Mantenha o tópico aberto, por enquanto.

 

Obrigado,

 

 

Daniel Afonso

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá pessoal,

 

Problema resolvido, pode fechar o tópico!

 

Para fazer um UPDATE no Access (OleDB) precisamos passar

os parâmetros na ordem que se encontram na tabela do BD.

Os parâmetros no código (.net) devem ficar entre [@parâmetro].

 

Ex: procedure

UPDATE tabela SET IdCliente = [@Id], nomeCliente = [@nome]....

 

Ex: tabela BD

IdCliente

nomeCliente

emailCliente

.

.

.

 

 

Abraços,

 

 

Daniel Afonso

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.