OleDbDataAdapter里的update方法问题

我仿照网上的例子,用gridcontrol显示数据,然后用DataSet里的rows.Delete()方法删除数据,显示的时候gridcontrol是可以删除的,但是后台数据库数据没有删除。

我加了一个OleDbDataAdapter的update方法,程序报错。

后来对比 了一下,发现我错在亮点:

1.update(DataSet dataset, String 表名);

2.OleDbCommandBuilder mybuilder = new OleDbCommandBuilder(myDataAdapter);    少了这一句,非常关键。

MSDN了一下OleDbCommandBuilder是干嘛的了,说明如下

OleDbCommandBuilder 类

.NET Framework 2.0
 
 
 
 
3(共 3)对本文的评价是有帮助 - 评价此主题
 

自动生成用于协调对 DataSet 的更改与关联数据库的单表命令。无法继承此类。

OleDbDataAdapter 不会自动生成为了使对 DataSet 所作的更改和相关联的数据源协调起来所必须的 SQL 语句。但是,如果设置了 OleDbDataAdapter  SelectCommand 属性,那么就可以创建 OleDbCommandBuilder 对象,来自动生成 SQL 语句以更新单表。然后,OleDbCommandBuilder 将生成其他任何未设置的 SQL 语句。

每当设置了 DataAdapter 属性,OleDbCommandBuilder 就将其本身注册为 RowUpdating 事件的侦听器。一次只能将一个 OleDbDataAdapter 与一个 OleDbCommandBuilder对象(或相反)互相关联。

为了生成 INSERT、UPDATE 或 DELETE 语句,OleDbCommandBuilder 会自动使用 SelectCommand 属性来检索所需的元数据集。如果在检索元数据后(例如在第一次更新后)更改 SelectCommand,则应调用 RefreshSchema 方法来更新元数据。

OleDbCommandBuilder 还使用由 SelectCommand 引用的 ConnectionCommandTimeout  Transaction 属性。如果修改了一个或多个这些属性或者替换了 SelectCommand本身,则用户应调用 RefreshSchema。否则,InsertCommandUpdateCommand  DeleteCommand 属性都保留它们以前的值。

如果调用 Dispose,则会解除 OleDbCommandBuilder  OleDbDataAdapter 的关联,并且不再使用生成的命令。

 

 

 

 

网上例子如下所示:

http://www.25175.com/200609/25175/25175_html/2006-11/594.html

如何用OleDbDataAdapter来对数据库进行操作?

 

请问如何用OleDbDataAdapter来对数据库进行删除、修改和添加?

 

OleDbDataAdapterDataSet和数据源之间建立联系的重要纽带。用它我们可以对数据库进行删除、修改和添加等操作,下面以删除(Delete)为例,说说操作步骤:     1、用OleDbConnection conn = getConn()语句建立数据库连接;     2、实例化OleDbDataAdapter对象,用select语句取得要删除的记录。而不是使用delete语句;     3、建立一个DataSet对象,并把执行select语句得到的记录添加到其中;

4、建立OleDbCommandBuilder对象,并与前面的OleDbDataAdapter对象关联,以监视RowUpdating事件的发生。在删除了指定的记录后,要通过执行OleDbDataAdapter对象的Update命令来更新数据库,语句如下:

OleDbCommandBuilder mybuilder = new OleDbCommandBuilder(myDataAdapter);     5、删除DataSet中包含表的特定记录     6、执行OleDbDataAdapter对象的Update命令更新数据库:

myDataAdapter.Update(ds,"notes")

7、关闭数据库连接。

以上操作步骤不仅适合于Delete操作,同样适合InsertUpdate等操作。下面我们以通过OleDbDataAdapter来执行删除(Delete)特定的数据库记录为例,看看具体代码:

public Boolean DelNote(string delid)

//删除特定记录,通过string类型的ID删除字段 { Boolean tempvalue=false;       try       {               OleDbConnection conn = getConn();

  //连接数据库.getConn():得到连接对象               string selectstr = "select * from notes where id=" + delid; OleDbDataAdapter myDataAdapter = new OleDbDataAdapter(selectstr,conn); OleDbCommandBuilder mybuilder = new OleDbCommandBuilder(myDataAdapter); //建立OleDbCommandBuilder          DataSet ds = new DataSet();   

//建立DataSet()实例               myDataAdapter.Fill(ds,"notes");        
              foreach(DataRow dr in ds.Tables["notes"].Rows)

//由于在开始选择了所有的记录,此处用集合方式
              {                                    if(dr["id"].ToString().Equals(delid))                     {                         dr.Delete();                     }                   }               myDataAdapter.Update(ds,"notes");                                       conn.Close();           tempvalue=true;           return(tempvalue);

//执行成功返回TRUE,否则返回FALSE     }

catch(Exception e)           {               throw(new Exception(",数据库删除出错:" + e.Message)) ;       } }

转载于:https://www.cnblogs.com/dscarlett/archive/2012/11/27/2790917.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值