SqlCommandBuilder如何实现批量更新

 更新时间:2015年10月26日 12:00:41   作者:tracywang  
这篇文章主要介绍了SqlCommandBuilder如何实现批量更新,需要的朋友可以参考下

一般是这样的,如果用设计器将SqlDataAdapter拖到页面中使用时,不会出现SqlDataAdapter.Update(ds)更新时出错情况,因为系统会自动生成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,就是这句,要确认是哪个表,除非是很大的数据量, 一般是感觉不到的),效率有些慢。

以上就是用SqlCommandBuilder 实现批量更新的方法,介绍了其优缺点,以及注意点,内容很详细,希望大家可以喜欢。

相关文章

  • ASP.NET MVC3 实现全站重定向的简单方法

    ASP.NET MVC3 实现全站重定向的简单方法

    这篇文章主要介绍了ASP.NET MVC3 实现全站重定向的简单方法,有需要的朋友可以参考一下
    2014-01-01
  • 使用.Net Core实现的一个图形验证码功能

    使用.Net Core实现的一个图形验证码功能

    SimpleCaptcha是一个使用简单,基于.Net Standard 2.0的图形验证码模块。这篇文章主要介绍了使用.Net Core实现的一个图形验证码功能,需要的朋友可以参考下
    2021-12-12
  • .NET API 接口数据传输加密最佳实践记录

    .NET API 接口数据传输加密最佳实践记录

    这篇文章主要介绍了.NET API 接口数据传输加密最佳实践记录,我们在做 Api 接口时,相信一定会有接触到要给传输的请求 body 的内容进行加密传输。其目的就是为了防止一些敏感的内容直接被 UI 层查看或篡改,需要的朋友可以参考下
    2022-10-10
  • .net WINFORM的GDI双缓冲的实现方法

    .net WINFORM的GDI双缓冲的实现方法

    下面小编就为大家分享一篇.net WINFORM的GDI双缓冲的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • 在.NET Web API设置响应输出Json数据格式常用的两种方式详解

    在.NET Web API设置响应输出Json数据格式常用的两种方式详解

    在ASP.NET Core Web API中设置响应输出Json数据格式常用以下两种方式:可以通过添加System.Text.Json或Newtonsoft.JsonJSON序列化和反序列化库在应用程序中全局设置接口响应的Json数据格式,本文示例使用的是新的Minimal API模式,感兴趣的朋友跟随小编一起看看吧
    2024-07-07
  • asp.Net JS取母板页控件值的简单方法

    asp.Net JS取母板页控件值的简单方法

    这篇文章介绍了asp.Net JS取母板页控件值的简单方法,有需要的朋友可以参考一下
    2013-07-07
  • asp.net core下给网站做安全设置的方法详解

    asp.net core下给网站做安全设置的方法详解

    这篇文章主要给大家介绍了关于asp.net core下给网站做安全设置的相关资料,文章通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-07-07
  • ASP.NET缓存的方法和最佳实践

    ASP.NET缓存的方法和最佳实践

    您应该在应用程序的每一层都实现缓存。向数据层、业务逻辑层、UI 或输出层添加缓存支持。内存现在非常便宜 — 因此,通过以智能的方式在整个应用程序中实现缓存,可以获得很大的性能提高
    2012-04-04
  • 在 .NET Framework 2.0 中未处理的异常导致基于 ASP.NET 的应用程序意外退出

    在 .NET Framework 2.0 中未处理的异常导致基于 ASP.NET 的应用程序意外退出

    如果在 Microsoft .NET Framework 2.0 上构建的基于 Microsoft ASP.NET 的应用程序中引发未处理的异常,该应用程序将会意外退出。如果出现这个问题,不会在应用程序日志中记录了解此问题所必需的异常信息。
    2009-11-11
  • .NET NativeAOT 用法指南

    .NET NativeAOT 用法指南

    NativeAOT是.NET 8中引入的一种编译方式,它将代码编译成原生代码,提高性能并节省资源,然而,NativeAOT也带来了一些问题,如反射依赖、泛型实例化等,本文详细介绍了如何使用NativeAOT以及如何解决这些常见问题,感兴趣的朋友跟随小编一起看看吧
    2025-01-01

最新评论