使用DataAdpater自动批量更新DataSet中的数据到数据库
使用DataAdpater的批量更新,好处是不用写具体的sql脚本,尤其是做web服务这个优势非常吸引人。
[WebMethod(Description = "Update服务提供的方法,将包含修改后数据的DateSet与本地数据库同步更新,成功返回更新的行数,失败返回-1。"), SoapHeader("currentUser")]
public int Update(DataSet ds)
{
if (!ValidateUser(currentUser.UserName, currentUser.UserPass))
{
return -1;
}
else
{
int res = 0;
using (SqlConnection sqlconn = new SqlConnection("Data Source=.;Initial Catalog=xxxx;User ID=sa;Password=sa"))
{
sqlconn.Open();
/ / //使用加强读写锁事务
SqlTransaction tran = sqlconn.BeginTransaction(IsolationLevel.ReadCommitted);
try
{
foreach (DataRow dr in ds.Tables[0].Rows)
{
//所有行设为修改状态
dr.SetModified();
}
//为Adapter定位目标表
SqlCommand cmd = new SqlCommand(string.Format("select * from {0} where 1=0 ", ds.Tables[0].TableName), sqlconn, tran);
SqlDataAdapter da = new SqlDataAdapter(cmd);
SqlCommandBuilder sqlCmdBuilder = new SqlCommandBuilder(da);
da.AcceptChangesDuringUpdate = false;
SqlCommand updatecmd = new SqlCommand(string.Format(" UPDATE [{0}] SET [Name] = @Name WHERE ([ID] = @ID) ", ds.Tables[0].TableName));
//不修改源DataTable
updatecmd.UpdatedRowSource = UpdateRowSource.None;
da.UpdateCommand = updatecmd;
da.UpdateCommand.Parameters.Add("@Name", SqlDbType.NVarChar, 50, "Name");
da.UpdateCommand.Parameters.Add("@ID", SqlDbType.Int, 4, ds.Tables[0].Columns[0].ColumnName);
da.UpdateBatchSize = 10000;
res = da.Update(ds.Tables[0]);
ds.AcceptChanges();
tran.Commit();
sqlconn.Close();
}
catch
{
tran.Rollback();
return -1;
}
}
return res;
}
}
注意:如果不指定DataAdapter的UpdateCommand ,则DataAdapter的CommandBuilder会自动构造默认的Update命令
使用DataAdpater自动批量更新DataSet中的数据到数据库的更多相关文章
- PHP如何批量更新MYSQL中的数据
最近项目需要用到批量更新数据库里的数据,在网上找了一下这方面的例子,觉得这个还不错,分享给大家. 在这个业务里里面涉及到了更新两张数据表,那么大家是不是会想到非常简单,马上上代码 $sql ,type ...
- PHP批量更新MYSQL中的数据
原文链接:https://blog.csdn.net/wuming19900801/article/details/62893429 $sql = "update newhouse_clic ...
- .net批量更新(插入、修改、删除)数据库
思路: 1. 设置DataTable中每行的状态标识,即调用DataRow的方法setAdded().setModified().Delete() 2. 使用DataAdapter的Update(Da ...
- 多线程查询数据,将结果存入到redis中,最后批量从redis中取数据批量插入数据库中【我】
多线程查询数据,将结果存入到redis中,最后批量从redis中取数据批量插入数据库中 package com.xxx.xx.reve.service; import java.util.ArrayL ...
- DataSet 中的数据排序 及 DataRow装成DataTable
1.DataSet 中的数据排序 DataSet ds = new DataSet(); // 获取当前排口的数据 ds = _xiaobill.GetHistoryData(yinZiBianm, ...
- 使用Ruby来实现批量更新AD中字段
准备工作 安装需要用到的gem gem install net-ldap gem install roo 准备好要更新的数据,比如exel表: /root/account.xlsx,内容如下 姓名 性 ...
- Winform中用comboBox来选择显示Dataset中表格数据
这是一次偷懒的尝试,因为每次都必须打开代码,调试才能看见数据,发现问题.也是借鉴了调试中查看dataset数据的模式,查看不同表格.经历一番研究,总算实现了想要的效果了,故作此一笔记.与人共享. 界面 ...
- C# 手动编写 DataSet,DataTable 及遍历DataSet中的数据
一.手动编写DataSet: 有时候不想从数据库导出 DataSet,或者有其他的需要,要将数据库里的DataSet包装成另一个样子,这个时候,了解DataSet的内部结构就非常必要.DataS ...
- 【Redis 向Redis中批量导入mysql中的数据(亲自测试)】
转自:https://blog.csdn.net/kenianni/article/details/84910638 有改动,仅供个人学习 问题提出:缓存的冷启动问题 应用系统新版本上线,这时候 re ...
随机推荐
- HDU 5636 Shortest Path 暴力
Shortest Path 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5636 Description There is a path graph ...
- Codeforces Round #114 (Div. 1) D. Wizards and Roads 笛卡尔树+树贪心+阅读题
D. Wizards and Roads 题目连接: http://www.codeforces.com/contest/167/problem/D Description In some count ...
- C\C++宏大全
一.标准预定义宏The standard predefined macros are specified by the relevant language standards, so they are ...
- [转载]android工程中引入另一个工程中的资源
原文地址:android工程中引入另一个工程中的资源作者:87fayuan 在项目中可能遇到这样的问题:项目过大,于是细分为N个子模块来做,每个模块都是不同的工程.涉及到activity传数据时,可以 ...
- java中copy 一个list集合的方法
java将一个list里的数据转移到另外一个list,可以使用for语句,一次使用add方法,示例如下: ArrayList list1=new ArrayList(); list1.add(&quo ...
- C# http Post 方法
摘自: http://geekswithblogs.net/rakker/archive/2006/04/21/76044.aspx Http Post in C# Searched out on t ...
- 会声会影X10 64位整合光盘V10.1.0.14简体中文版 下载
http://xiazai.huishenghuiying.com.cn/wm/huishenghuiyingx10_64bit_wmqm.exe
- Gstreamer学习
Gstreamer学习笔记----Gstreamer架构设计思想 http://blog.csdn.net/tx3344/article/details/7497434 Gstreamer到底是个啥? ...
- Android colors.xml 颜色列表
android 常用项 <?xml version="1.0" encoding="utf-8"?> <resources> <c ...
- iOS exit(),abort(),assert()函数区别
iOS exit(),abort(),assert()函数区别 exit() 退出程序 abort() 停止程序, assert()检查里面的参数如果为nil抛出异常: