zoukankan      html  css  js  c++  java
  • 用SqlCommandBuilder 实现批量更新

      (一) 有没有人遇到这种情况,用 SqlDataAdapter.Update(ds)更新时出错?
    answer: 一般是这样的,如果用设计器将SqlDataAdapter拖到页面中使用时,不会出现这种情况,因为系统会自动生成SqlDataAdapter的属性命令,比如: .UpdateCommane insertCommand selectCommand等。但是有些程序员不喜欢用设计器,或者是有些地方没必要拖动SqlDataAdapter这么个庞大物来实现,那么SqlDataAdapter就不会自动生成相关的查询或更新语句了.所以当执行到SqlDataAdapter.Update(ds)语句时,SqlDataAdapter桥接器不知道更新哪个表.不报错了.  

    (二)解决方法:

    用SqlCommandBuilder 实现批量更新

    1.功能: 

    可以实现你对DataSet在UI层做任意操作后,直接丢给这个方法,这个方法就可以自动把你的修改更 新到数 据库中,而没必要每次都更新到数据库

    2.使用方法

      public int UpdateByDataSet(DataSet ds,string strTblName,string strConnection)
      {
      try
      {
      SqlConnection conn = new SqlConnection(strConnection));
       
      SqlDataAdapter myAdapter = new SqlDataAdapter();
      SqlCommand myCommand = new SqlCommand("select * from "+strTblName),(SqlConnection)this.conn);  
      myAdapter.SelectCommand = myCommand;
      SqlCommandBuilder myCommandBuilder = new SqlCommandBuilder(myAdapter);  
      myAdapter.Update(ds,strTblName);  
      
      return 0;
     }
     catch(BusinessException errBU)
     {  
      throw errBU;
     }  
     catch(Exception err)
     {  
      throw new BusinessException(err);
     }
    }

    直接调用这个方法就可以啦,说明的一点是select * from "+strTblName是一定要的,作用大家也应该想到了,主要是告诉 SqlDataAdapter更新哪个表

    3.什么时候用?

      a. 有时候需要缓存的时候,比如说在一个商品选择界面,选择好商品,并且进行编辑/删除/更新后,最后一并交给数据库,而不是每一步操作都访问数据库,因为客户选择商品可能进行n次编辑/删除更新操作,如果每次都提交,不但容易引起数据库冲突,引发错误,而且当数据量很大时在用户执行效率上也变得有些慢

      b.有的界面是这样的有的界面是这样的,需求要求一定用缓存实现,确认之前的操作不提交到库,点击页面专门提交的按钮时才提交商品选择信息和商品的其它信息. 我经常遇到这样的情况

      c.有些情况下只往数据库里更新,不读取. 也就是说没有从数据库里读,SqlDataAdapter也就不知道是更新哪张表了,调用Update就很可能出错了。这样的情况下可以用SqlCommandBuilder 了.
       

    4. 注意点: 

    1.只能更新一个表,不能更新两个或两个以上相关联的表
    2.表中必须有主键
    3.更新的表中字段不能有image类型的

    5.优点:

      节省代码量,节省时间,这个方法可以代替所有的: 更新/删除/插入操作语句

    6.缺点:
    访问两次数据库(select * TableName,就是这句,要确认是哪个表,除非是很大的数据量,一般是感觉不到的),效率有些慢。

  • 相关阅读:
    Linux 学习 step by step (1)
    ubuntu server nginx 安装与配置
    ubuntu server samba服务器配置
    iOS app集成支付宝支付流程及后台php订单签名处理
    mac 连接windows 共享内容
    linux 文件查找,which,whereis,locate,find
    ubuntu server vsftpd 虚拟用户及目录
    ubuntu server 安装 mantis bug tracker 中文配置
    ubuntu server vsftpd 匿名用户上传下载及目录设置
    linux 用户管理,用户权限管理,用户组管理
  • 原文地址:https://www.cnblogs.com/chengulv/p/1292145.html
Copyright © 2011-2022 走看看