SqlCommandBuilder类如何批量更新excel或者CSV数据
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章给大家分享的是有关SqlCommandBuilder类如何批量更新excel或者CSV数据的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。当你批量操作数据的时候,常常
千家信息网最后更新 2026年11月02日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安全错误
数据库的锁怎样保障安全
有格互联网科技
上海卓越科技互联网
重庆互联网络科技
科技互联网技术
腾讯阿里互联网科技
网络科技有限互联网
华中科技大学互联网
致聘互联网科技
互联网科技缩写
美国互联网黑科技
亿账通互联网科技
深圳艾佳互联网科技
长亮科技 互联网金融
银川新华互联网科技职业技术培训学校图片
贵州叶脉互联网科技有限公司所属行业
中国互联网公司排名锤子科技
用友工业互联网科技发展
互联网领先科技宣传片
银川新华互联网科技学校是国营吗
黑龙江互联网科技公司
互联网是不是新科技
互联网科技视频
浩特互联网科技
济南和联互联网科技有限公司
互联网实体化科技化
青岛中康互联网医疗科技有限公司
中盈科技互联网信息有限公司
互联网教育科技公司vipkid
现代互联网科技股
吉林省码上互联网科技电话