在数据库中批量插入数据许多人都已经了解了,就是使用.net 中的SqlBulkCopy对象(MSDN详解)。我们在做评教系统的时候使用过这个对象,它能将数据表批量导入到数据库中,效率比单条插入数据效率高很多,具体的我就不多说了,看MSDN就可以了。

但是最近我在做一个项目的时候,遇到了一个问题,就是批量修改数据表,SqlBulkCopy对象是不能实现这个需求的。于是,我就求助了度娘,搜到了这篇文章SqlDataAdapter Update

具体的实现方式就是使用了.net中的SqlDataAdapter(MSDN解释)对象,想必许多人对这个对象已经很熟悉了,我以前只是把它当作简单的操作数据库的对象来使用,现在才发现它还可以把数据批量更新到数据库中。

总的来说,批量更新数据需要的对象主要有三个有:

SqlDataAdapter核心对象

SqlCommand 总共需要四个,分别对应数据表的select、add、update、delete操作。具体解释一下。对一张数据表,可能执行四种操作,就是增加、删除、修改、查询,当SqlDataAdapter最后提交操作时,会根据数据表中的每一条记录的标志(增加、删除、修改、查询)来使用对应的SqlCommand对它(一条记录)进行操作,所以需要四个。

DataSet或DataTable等存储待更新到数据库中的数据。

这样,我们为了实现数据表的批量更新,可以先把数据表查询到DataSet或DataTable中,然后对其进行各种修改,最后写回到数据库中。

需要注意的是,数据库中的待更新的表及DataSet或DataTable中的表必须要有主键。

 <span style="font-size:18px;">System.Data.SqlClient.SqlDataAdapter sda = new System.Data.SqlClient.SqlDataAdapter();//定义一个SqlDataAdapter 的实例

      SqlCommand scmd = new SqlCommand();//定义一个SqlCommand的实例,以便绑定
scmd.CommandType = CommandType.Text;
scmd.Connection = new SqlConnection(ConnectionString); scmd.Parameters.Add("@acc_title_id", SqlDbType.Int, , "acc_title_id");//重要的地方,将dt的列写到参数中去
scmd.Parameters.Add("@acc_std_title_id", SqlDbType.Int, , "acc_std_title_id");
scmd.Parameters.Add("@back_id", SqlDbType.Int, , "back_id"); scmd.CommandText = string.Format("update t_std_acc_title_ent_acc_title set acc_title_id=@acc_title_id where acc_std_title_id = @acc_std_title_id and acc_id = {0} and acc_title_id=@back_id", eleid);//更新操作对应的sql语句
sda.UpdateCommand = scmd;//设置SqlDataAdapter执行Update操作时使用的对象
//还需要设置另外那三个SqlCommand对象,方法类似,这里就不赘述了。 sda.Update(dt);//将dataTable中的数据更新到数据库,dt中的数据可以来自数据库,或者其他地方。
</span>

程序员的基础教程:菜鸟程序员

最新文章

  1. Office 2010启动时出现无法验证此应用程序的许可证的解决
  2. LightOJ 1422 (区间DP)
  3. HTTP Status 404 - No result defined for action com.csdhsm.struts.action.LoginAction and result error
  4. CMD删除Mysql 服务
  5. 1109 html5 xhtml;
  6. oracle常见sql积累
  7. C#,Java,C++中的finally关键字
  8. 我的Fedora22美化日记
  9. VMware Workstation(虚拟机软件) V10.0 简体中文版可以安装了
  10. sublime text 3 配置python IDE
  11. php 文档操作
  12. java网络编程(4)——udp实现聊天
  13. java调用python程序以及向python程序传递参数
  14. MOS管的低端驱动和高端驱动
  15. springboot2.0集成shiro出现ShiroDialect报错找不到AbstractTextChildModifierAttrPr
  16. socket练习--ssh
  17. java 编解码
  18. java多线程学习--java.util.concurrent (转载)
  19. PowerDesigner :
  20. DirectStream、Stream的区别-SparkStreaming源码分析02

热门文章

  1. HDU2032 杨辉三角
  2. 时间由yyyy-MM-dd HH:mm:ss专为yyyy-MM-dd
  3. spring_JavaConfig
  4. Java问题:中间件是什么
  5. 戴尔PowerEdge RAID控制卡使用示例(PERC H710P为例)
  6. 配置和启动脚本(bash shell学习01)
  7. java代码-----------java中的windowAdapter的实例
  8. thinkphp遇到的小问题,js文件中U方法不被解析
  9. 微信小程序之如何使用iconfont
  10. python开发函数进阶:匿名函数