数据库不会使用OleDbDataAdapter更新表

时间:2015-12-15 10:19:35

标签: c# oracle oracle11g oledb

enter image description here

private void button3_Click(object sender, EventArgs e)
{
    try
    {
        adapter = new OleDbDataAdapter("SELECT * FROM EMP", "Provider = OraOLEDB.Oracle;Driver=OraOLEDB.Oracle;Data Source=192.168.1.25/ORA8I;User id=INTERNSHIP;Password=123");
        cmd = new OleDbCommandBuilder(adapter);

        adapter.Update(ds, "EMP");
        MessageBox.Show("information updated", "Update", MessageBoxButtons.OK, MessageBoxIcon.Information);
   }
   catch
   {
        MessageBox.Show("There is nothing to update");
   }
}

注意:使用oracle 11g数据库。 Dataset ds在表单加载期间设置为Dataset ds = new Dataset();

  

错误:针对select命令生成动态sql。

但我已将 phno设为我的主键

1 个答案:

答案 0 :(得分:1)

如果要从数据库初始化数据集,则应使用OleDbDataAdapter类的Fill方法而不是Update方法

adapter.Fill(ds);

错误告诉您需要指定要更新的表的字段。最简单的方法是使用OleDbCommandBuilder类生成更新语句。

 adapter = new OleDbDataAdapter("SELECT * FROM EMP", "...");
 cmd = new OleDbCommandBuilder(adapter);
 adapter.UpdateCommand = cmd.GetUpdateCommand();
 adapter.Update(ds, "EMP");

构建器将生成更新语句并指定所有字段。

不要忘记处理您使用的资源(连接,适配器,命令等)。最后只需调用Dispose方法:

adapter.Dispose();

或使用using关键字

using (adapter = new OleDbDataAdapter("...", "..."))
{
}