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

时间:2013-07-12 07:03:14

标签: c# sql oracle

我的全球班级:

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 DB中一行中字段的过程:

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

TIPS:

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

据我所知,这是双引号。

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

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

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

我想问题出在这里:

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

我该怎么办?感谢。

1 个答案:

答案 0 :(得分:3)

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

默认情况下,OleDbCommandBuilder不知道它所使用的数据库系统使用的引用系统。

相关问题