我的全球班级:
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;
我该怎么办?感谢。
答案 0 :(得分:3)
尝试将OleDbCommandBuilder
对象的QuotePrefix
和QuoteSuffix
设置为"
。
默认情况下,OleDbCommandBuilder
不知道它所使用的数据库系统使用的引用系统。