ORA-00904:更新时出现无效标识符错误

本文关键字:无效 标识符 错误 更新 ORA-00904 | 更新日期: 2023-09-27 18:22:07

我的全局类:

class Global
{
    public static OleDbDataAdapter adapter;
    public static DataTable dt;
}

我用来填充DataGridView:的程序

    OleDbConnection connection;
    OleDbCommandBuilder builder;
    void gridfill()
    {
        connection = new OleDbConnection("Provider=MSDAORA;Data Source=XXX;" 
                                       + "user id=XXX;password=XXX;"
                                       + "persist security info=false;");

        Global.adapter = new OleDbDataAdapter("select '"Id'", '"UserComputer'", '"GuralID'", '"Type'", '"CreatedOn'", '"State'" from COMPUTERS", connection);
        builder = new OleDbCommandBuilder(Global.adapter);
        Global.dt = new DataTable();
        Global.adapter.Fill(Global.dt);
        dataGridView1.DataSource = Global.dt;
        dataGridView1.ReadOnly = true;
    }

我用来更新Oracle数据库中一行字段的过程:

    private void button1_Click(object sender, EventArgs e)
    {
        try
        {
            if (comboBox1.Text == "New")
            {
                Global.dt.Rows[rowId]["State"] = 0;
            }
            else if (comboBox1.Text == "Old")
            {
                Global.dt.Rows[rowId]["State"] = 1;
            }
            else if (comboBox1.Text == "Junk")
            {
                Global.dt.Rows[rowId]["State"] = 2;
            }
            Global.adapter.Update(Global.dt);
            this.Close();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
    }

当我跑步时,我的DataGridView会被填满。那部分还可以。然后我双击一行,就会出现另一个表单。该表单获取所选行的值。上面有一个更新按钮。我用它来更改所选行的字段值。我和你分享的第三个代码就是这样做的。但我得到了ORA-00904:"STATE"无效标识符。

我调试过了。错误出现在以下行:

Global.adapter.Update(Global.dt);

提示:

表实际上是由ORM类创建的。

正如我所知,这是关于双引号的。

Ex : 'Select State from COMPUTERS' does not work but 'Select "State" from COMPUTERS' does.

在填充DataGridView时遇到相同问题后,我在SQL查询中使用了"''"前缀。问题解决了。

但在尝试为字段分配新值时,我无法使用它。我需要一种方法来做到这一点。

我想问题就在这里:

Global.dt.Rows[rowId]["State"] = 0;

我能做什么?谢谢

ORA-00904:更新时出现无效标识符错误

尝试将OleDbCommandBuilder对象上的QuotePrefixQuoteSuffix设置为"

默认情况下,OleDbCommandBuilder不知道它所使用的数据库系统是什么报价系统。