【问题标题】:ORA-00904 : invalid identifier error when updatingORA-00904: 更新时出现无效标识符错误
【发布时间】:2013-07-10 15:54:19
【问题描述】:

我的全球班级:

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

提示:

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

据我所知,这与双引号有关。

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

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

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

我猜问题出在这里:

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

我能做什么?谢谢。

【问题讨论】:

    标签: c# sql oracle


    【解决方案1】:

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

    默认情况下,OleDbCommandBuilder 不知道它正在与之交谈的数据库系统使用什么报价系统。

    【讨论】:

    • builder.QuotePrefix = "\""; builder.QuoteSuffix = "\"";
    猜你喜欢
    • 2012-07-01
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多