2013-07-12 52 views
3

我的全球級時:ORA-00904:無效的標識符錯誤更新

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

TIPS:

表實際上是由ORM類創建。

據我所知,這是雙引號。

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

我用「\」在我SQL查詢前綴填充DataGridView時有同樣的問題後。問題解決了。

但我不能在試圖爲該字段分配新值時使用它。我需要一種方法來做到這一點。

我想這個問題是在這裏:

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

我能做些什麼?謝謝。

回答

3

嘗試將您的OleDbCommandBuilder對象上的QuotePrefixQuoteSuffix設置爲"

默認情況下,OleDbCommandBuilder不知道它所使用的數據庫系統的報價系統。

+0

謝謝。這就是訣竅! –

+0

builder.QuotePrefix =「\」「; builder.QuoteSuffix =」\「」; –