【问题标题】:Update an Oracle table from a Datagridviewcells从 Datagridviewcells 更新 Oracle 表
【发布时间】:2020-08-24 14:42:48
【问题描述】:

我已将 XML 文件加载到 DataGridView 中。从那里,我需要捕获三个特定列的值并更新 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 获得的所有三个字符串,但没有一个字符串返回空值。 该序列在数据库中是有效的。

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

【问题讨论】:

    标签: c# xml sql-update oracle12c


    【解决方案1】:

    首先您的更新字符串不正确。 通常 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);
    

    【讨论】:

    • 如你所说。我从“@”更改为“:”。谢谢你的时间。
    猜你喜欢
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 2023-03-08
    • 2018-07-01
    • 2014-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多