3

私のグローバルクラス:

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いっぱい。その部分は大丈夫です。次に、行をダブルクリックすると、別のフォームが表示されます。そのフォームは、選択された行の値を取得します。その上に更新ボタンがあります。選択した行のフィールドの値を変更するために使用します。私があなたと共有した3番目のコードは、それを行うためのものです。しかし、ORA-00904: "STATE" 無効な識別子が表示されます。

デバッグしました。エラーは次の行にあります。

Global.adapter.Update(Global.dt);

チップ:

テーブルは、実際には ORM クラスによって作成されます。

私が知っているように、これは二重引用符に関するものです。

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

SQLを入力するときに同じ問題が発生した後、クエリで「\」プレフィックスを使用しましたDataGridView。問題は解決しました。

しかし、フィールドに新しい値を割り当てようとすると使用できません。そして、それを行う方法が必要です。

問題はここにあると思います:

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

私に何ができる?ありがとう。

4

1 に答える 1

3

オブジェクトのQuotePrefixQuoteSuffixを に設定してみてください。OleDbCommandBuilder"

デフォルトでは、は、OleDbCommandBuilder会話しているデータベース システムがどの引用システムを使用しているかを知りません。

于 2013-07-12T07:09:02.057 に答える