SqlCommandBuilder类如何批量更新excel或者CSV数据
发表于:2025-01-18 作者:千家信息网编辑
千家信息网最后更新 2025年01月18日,这篇文章给大家分享的是有关SqlCommandBuilder类如何批量更新excel或者CSV数据的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。当你批量操作数据的时候,常常
千家信息网最后更新 2025年01月18日SqlCommandBuilder类如何批量更新excel或者CSV数据
这篇文章给大家分享的是有关SqlCommandBuilder类如何批量更新excel或者CSV数据的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
当你批量操作数据的时候,常常会使用到update table1 from table2的这种方式,这种方式是最简洁的。
但当你从excel或者CSV文件更新海量数据时,再使用这种方法,那性能是不是好?字符串拼接又何其之多,大数据是不是需要分组更新?
我不想去检测各种方法的速度,因为我个人比较认可以下方式,欢迎大家批评与指正。
我需要使用到的类主要是SqlCommandBuilder。
/// 准备更新的DataTable新数据 /// 对应要更新的数据库表名 /// 对应要更新的数据库表的主键名 /// 对应要更新的列的列名集合 /// 需要在SQL的WHERE条件中限定的条件字符串,可为空。 /// 每次往返处理的行数 ///返回更新的行数 public static int Update(DataTable table, string TableName, string primaryKeyName, string[] columnsName, string limitWhere,int onceUpdateNumber) { if (string.IsNullOrEmpty(TableName)) return 0; if (string.IsNullOrEmpty(primaryKeyName)) return 0; if (columnsName == null || columnsName.Length <= 0) return 0; DataSet ds = new DataSet(); ds.Tables.Add(table); int result = 0; using (SqlConnection sqlconn = new SqlConnection(SqlHelper.ConnString)) { 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}", TableName,limitWhere), sqlconn, tran); SqlDataAdapter da = new SqlDataAdapter(cmd); SqlCommandBuilder sqlCmdBuilder = new SqlCommandBuilder(da); da.AcceptChangesDuringUpdate = false; string columnsUpdateSql = ""; SqlParameter[] paras = new SqlParameter[columnsName.Length]; //需要更新的列设置参数是,参数名为"@+列名" for (int i = 0; i < columnsName.Length; i++) { //此处拼接要更新的列名及其参数值 columnsUpdateSql += ("[" + columnsName[i] + "]" + "=@" + columnsName[i] + ","); paras[i] = new SqlParameter("@" + columnsName[i], columnsName[i]); } if (!string.IsNullOrEmpty(columnsUpdateSql)) { //此处去掉拼接处最后一个"," columnsUpdateSql = columnsUpdateSql.Remove(columnsUpdateSql.Length - 1); } //此处生成where条件语句 string limitSql = ("[" + primaryKeyName + "]" + "=@" + primaryKeyName); SqlCommand updateCmd = new SqlCommand(string.Format(" UPDATE [{0}] SET {1} WHERE {2} ", TableName, columnsUpdateSql, limitSql)); //不修改源DataTable updateCmd.UpdatedRowSource = UpdateRowSource.None; da.UpdateCommand = updateCmd; da.UpdateCommand.Parameters.AddRange(paras); da.UpdateCommand.Parameters.Add("@" + primaryKeyName, primaryKeyName); //每次往返处理的行数 da.UpdateBatchSize = onceUpdateNumber; result = da.Update(ds,TableName); ds.AcceptChanges(); tran.Commit(); } catch { tran.Rollback(); } finally { sqlconn.Dispose(); sqlconn.Close(); } } return result; }
注: 此方法调用时要传入的参数,包括主键名和列名都应与数据库实际的名称相对应。
你可以不传入限定的where条件,如果传入,只需传入:Name="chamy" or Name="jundy",不需加入"where"等字符,不可以在此处传入主键的限定,你只需要在主键名这个参数上传入名称即可。
感谢各位的阅读!关于"SqlCommandBuilder类如何批量更新excel或者CSV数据"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
更新
数据
参数
条件
字符
数据库
方式
内容
名称
字符串
方法
更多
篇文章
处理
不错
实用
简洁
个人
事务
只需
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
如何加入软件开发外包团队
阜阳专业的汽配软件开发费用
先进软件开发模型
川大的网络安全专业好找工作吗
软件开发能自己学吗
spring查找所有服务器实例
巨野软件开发系统服务至上
江苏学校数显钟服务器
mysql 数据库 分表
ps5修复数据库
店铺管理软件开发小飞猪
数据库与安全 设计
数据库工程师加班费
华为手机显示连接服务器错误
上海天希网络技术有限公司
国研网数据库主要文献类型
医疗网络安全隐患
数据库中的用户表
数据库菜单宏怎么做
无线传感网络技术讲义
画一个甘特图软件开发用
网络安全宣传日新闻稿
企业应用软件开发学什么
山东泰山服务器
小学信息技术课网络安全教案
华为手机显示连接服务器错误
约束冲突的冲突发生于数据库
易语言数据库查询病
互联网正芒科技
java加入数据库jar包