从Datagridviewcells更新Oracle表

问题描述

我已将XML文件加载到DataGridView中。从那里,我需要捕获三个specifics列值并更新Oracle数据表。

    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));
                       
        }

我测试了从Datagridview中获得的所有三个字符串,没有一个返回空值。 该序列是数据库中的有效序列。

我找不到我的错误在哪里。

解决方法

首先,您的更新字符串不正确。 通常,Oracle使用“:”作为参数前缀,并且必须删除“;”。在字符串末尾。

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

然后,您设置了4个参数,但更新字符串中只有2个(:NOTA和: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);