André Luis
André Luis

Reputation: 23

Update an Oracle table from a Datagridviewcells

I´ve loaded a XML file into a DataGridView. From there, I need to catch three specifics columns values and update an Oracle datatable.

    private void btnImpRetorno_Click(object sender, EventArgs e)
    {
        // Número da nota fiscal
        DataGridViewCell dgvnumeronfse = dgvDadosNota[1, 0];
        Int32 numeronfse = Convert.ToInt32(dgvnumeronfse.Value);

        // Data e hora
        DataGridViewCell dgvdata = dgvDadosNota[3, 0];
        DataGridViewCell dgvhora = dgvDadosNota[4, 0];
        string datahora = Convert.ToString(dgvdata.Value) + " " + Convert.ToString(dgvhora.Value);

        // Código de autenticidade da nota
        DataGridViewCell dgvcodigo = dgvDadosNota[8, 0];
        string codigo = Convert.ToString(dgvcodigo.Value);

        //edtNumero.Text = Convert.ToString(datahora);
        
        string textoupdate = "update tasy.nota_fiscal set nr_nfe_imp = @NOTA where nr_sequencia = @SEQUENCIA; ";

        using (OracleConnection conexao = new OracleConnection(conexaoOracle12g))
        {
            OracleCommand comandoupdate = new OracleCommand(textoupdate, conexao);
            comandoupdate.Parameters.Add("@NOTA", OracleDbType.Int32);
            comandoupdate.Parameters["@NOTA"].Value = numeronfse;
            comandoupdate.Parameters.Add("@DATAHORA", OracleDbType.Varchar2).Value = datahora;
            comandoupdate.Parameters.Add("@CODIGO", OracleDbType.Varchar2).Value = codigo;
            comandoupdate.Parameters.Add("@SEQUENCIA", OracleDbType.Int32);
            comandoupdate.Parameters["@SEQUENCIA"].Value = Convert.ToInt32(edtSequencia.Text);
                
            conexao.Open();
            Int32 linhasatualizadas = comandoupdate.ExecuteNonQuery();
            MessageBox.Show("Linhas Atualizadas {0}", Convert.ToString(linhasatualizadas));
                       
        }

I tested all three strings I get from the Datagridview and none off them returns null value. The sequence is a valid one within the database.

I can´t find where my error is.

Upvotes: 1

Views: 70

Answers (1)

PinBack
PinBack

Reputation: 2564

First your update String is not correct. Normally Oracle uses ":" as parameter prefix and you must remove ";" at the end of your string.

string textoupdate = "update tasy.nota_fiscal set nr_nfe_imp = :NOTA where nr_sequencia = :SEQUENCIA";

Then you have set 4 parameters but in your update string are only 2 (:NOTA and :SEQUENCIA)

comandoupdate.Parameters.Add("NOTA", OracleDbType.Int32);
comandoupdate.Parameters["NOTA"].Value = numeronfse;
comandoupdate.Parameters.Add("SEQUENCIA", OracleDbType.Int32);
comandoupdate.Parameters["SEQUENCIA"].Value = Convert.ToInt32(edtSequencia.Text);

Upvotes: 1

Related Questions