私のグローバルクラス:
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;
私に何ができる?ありがとう。