none
UPDATE RRS feed

  • Pergunta

  • Oi pessoal .

    Estou fazendo um UPDATE simples mas não funciona .

     Dim txt As TextBox = DirectCast(GridView1.FindControl("TextBox1"), TextBox)
            cmd.CommandText = "UPDATE Principal SET Quantidade = " & txt.Text & ""
            cmd.ExecuteNonQuery()

    Alguem saberia me informar onde eu errei ? veja a mesagem do erro .

    Muito obrigado .


    J C Teixeira Simoes

    segunda-feira, 9 de abril de 2012 07:28

Respostas

  • Boa Tarde,

    Vi que os colegas já tentaram ajudá-lo bastante e o problema continua. Até por uma questão de boa prática, sugiro que tente trabalhar com parametros, o que é melhor e previne injections.. Tente o seguinte código:

    Dim conn As New System.Data.OleDb.OleDbConnection()
    conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|" & vbBack & "d1.mdb"
    
    Dim command as New System.Data.OleDb.OleDbCommand()
    command.Connection = conn
    command.CommandType = System.Data.CommandType.Text
    command.CommandText = "UPDATE Login set Usuario=@Usuario, Senha=@Senha WHERE Usuario=@Usuario"
    
    Dim parameter As System.Data.OleDb.OleDbParameter
    
    'Usuário
    parameter = New System.Data.OleDb.OleDbParameter()
    parameter.ParameterName = "@Usuario"
    parameter.OleDbType = System.Data.OleDb.OleDbType.VarChar
    parameter.DbType = System.Data.DbType.[String]
    parameters.Value = TextBox1.Text.ToString()
    command.Parameters.Add(parameter)
    
    'Senha
    parameter = New System.Data.OleDb.OleDbParameter()
    parameter.ParameterName = "@Senha"
    parameter.OleDbType = System.Data.OleDb.OleDbType.VarChar
    parameter.DbType = System.Data.DbType.[String]
    parameters.Value = TextBox2.Text.ToString()
    
    command.Parameters.Add(parameter)
    
    conn.Open()
    command.ExecuteNonQuery()

    Espero ter ajudado

    Abraços

    segunda-feira, 9 de abril de 2012 16:05

Todas as Respostas

  • O objeto cmd existe? Ele foi instanciado aonde?

    Carlos Eduardo Ferreira

    segunda-feira, 9 de abril de 2012 10:37
  • Ele esta declarado como .

    Dim cmd As New OleDbCommand

    e a conexão esta aberta no page_Load

     Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\bd1.mdb"
            cmd.Connection = cn
            cn.Open()


    J C Teixeira Simoes



    segunda-feira, 9 de abril de 2012 10:57
  • Qual é o valor de txt.Text quando você faz o debug da aplicação?


    Carlos Eduardo Ferreira

    segunda-feira, 9 de abril de 2012 11:05
  • É um valor numerico que eu Insiro no textbox para Quantidade de produtos .

    O Tipo de Dados da tabela é (Texto)


    J C Teixeira Simoes

    segunda-feira, 9 de abril de 2012 11:11
  • Interessante que eu tenho outro UPDATE para alterar a senha do usuario e funciona perfeito .

    cmd.CommandText = "UPDATE Login set Usuario='" & TextBox1.Text & "',Senha='" & TextBox2.Text & "' WHERE Usuario='" & TextBox1.Text & "'"
            cmd.ExecuteNonQuery()


    J C Teixeira Simoes

    segunda-feira, 9 de abril de 2012 11:19
  • Vc já debugou seu código ? o txt.text realmente existe pq o erro é que ele está tentando executar e tem algo que não está instanciado, pelo código que vc informou a única coisa é o txt.text, vc não esta tentando fazer esse update no load da página ?

    Junior

    segunda-feira, 9 de abril de 2012 11:26
  • Já Start Debuggin varias veses mas sempre ocorre o erro da imagem a cima ao clicar no button .

    O UPDATE esta sendo feito no evento .

    Protected Sub Button5_Click(ByVal sender As Object, ByVal e As System.EventArgs)

    O txt esta no itemtemplate do GridView1 com a ID de TextBox1 e com DataBindings bindings for text field binding bound to  Quantidade format (none) .

    Agora como que instancia isto corretamente por exemplo ?


    J C Teixeira Simoes

    Muito obrigado pela atenção pessoal .
    segunda-feira, 9 de abril de 2012 11:38
  • debugando qdo vc dá o directcast ele dá erro ou não ?

    Se não dá veja qual o valor text do txt se já dá erro seu directcast está errado vejo como está seu templecolunm.


    Junior

    segunda-feira, 9 de abril de 2012 11:57
  • Só por via das duvidas eu ja tentei com DirectCast , Ctype e até o TryCast .

    Mas o erro aparece mesmo como se estivesse na linha do UPDATE .

    Mas não descarto ter erro no DirectCast !

    Poderia me fornecer um exemplo de como seria o correto no meu caso só para confirmar ?

    Muito Obrigado .


    J C Teixeira Simoes

    segunda-feira, 9 de abril de 2012 12:11
  • tente fazer assim :

    Dim valor As Integer = DirectCast(e.Item.FindControl("txtValor"), TextBox).Text


    Junior

    segunda-feira, 9 de abril de 2012 12:22
  • Não funcionou deste jeito  nem passei pelo compilador . "Item não é membro de System.EventArgs ".


    J C Teixeira Simoes

    segunda-feira, 9 de abril de 2012 13:19
  • Eu tive comparando com outros post aparentemente meu DirectCast esta certo !?

    Alguem seberia qual ou porque do erro  e não da certo ??


    J C Teixeira Simoes

    segunda-feira, 9 de abril de 2012 13:40
  • Posso esta pegando o trem andando e falando bobagem, mas pelo exemplo que vc postou no inicio:

      cmd.CommandText = "UPDATE Principal SET Quantidade = " & txt.Text & ""

    E pelo que vc disse que o campo na tabela é texto, deveria ser assim:

      cmd.CommandText = "UPDATE Principal SET Quantidade = ''" & txt.Text & "'"

    Se eu estiver viajando, favor desconsiderar o post! kkkkk


    Ninguém falou que seria fácil!

    segunda-feira, 9 de abril de 2012 15:42
  • Não funcionou , continua com o mesmo erro . Ja tentei colocar até um for e nada .

    Mas muito obrigado pela atenção .


    J C Teixeira Simoes

    segunda-feira, 9 de abril de 2012 15:51
  • Boa Tarde,

    Vi que os colegas já tentaram ajudá-lo bastante e o problema continua. Até por uma questão de boa prática, sugiro que tente trabalhar com parametros, o que é melhor e previne injections.. Tente o seguinte código:

    Dim conn As New System.Data.OleDb.OleDbConnection()
    conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|" & vbBack & "d1.mdb"
    
    Dim command as New System.Data.OleDb.OleDbCommand()
    command.Connection = conn
    command.CommandType = System.Data.CommandType.Text
    command.CommandText = "UPDATE Login set Usuario=@Usuario, Senha=@Senha WHERE Usuario=@Usuario"
    
    Dim parameter As System.Data.OleDb.OleDbParameter
    
    'Usuário
    parameter = New System.Data.OleDb.OleDbParameter()
    parameter.ParameterName = "@Usuario"
    parameter.OleDbType = System.Data.OleDb.OleDbType.VarChar
    parameter.DbType = System.Data.DbType.[String]
    parameters.Value = TextBox1.Text.ToString()
    command.Parameters.Add(parameter)
    
    'Senha
    parameter = New System.Data.OleDb.OleDbParameter()
    parameter.ParameterName = "@Senha"
    parameter.OleDbType = System.Data.OleDb.OleDbType.VarChar
    parameter.DbType = System.Data.DbType.[String]
    parameters.Value = TextBox2.Text.ToString()
    
    command.Parameters.Add(parameter)
    
    conn.Open()
    command.ExecuteNonQuery()

    Espero ter ajudado

    Abraços

    segunda-feira, 9 de abril de 2012 16:05
  • Bom , vou estudar isto e as dicas de todos , depois retorno dizendo se e quando consegui .

    Qualquer coisa eu me viro .

    Muito obrigado a todos pela atenção .

    A Microsoft poderia inserir o nome do(s) criador do Visual Studio no Help >> About .

    Visual Studio é o melhor !!


    J C Teixeira Simoes

    segunda-feira, 9 de abril de 2012 16:16
  • Oi pessoal .

    Consegui resolver .

    Muito obrigado .


    J C Teixeira Simoes

    segunda-feira, 23 de abril de 2012 19:21