SqlCommandBuilder类如何批量更新excel或者CSV数据
发表于:2024-11-14 作者:千家信息网编辑
千家信息网最后更新 2024年11月14日,这篇文章给大家分享的是有关SqlCommandBuilder类如何批量更新excel或者CSV数据的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。当你批量操作数据的时候,常常
千家信息网最后更新 2024年11月14日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安全错误
数据库的锁怎样保障安全
复制数据库表并修改名字
滨海湿地资源数据库
现在网络技术云计算吃香吗
西安互助盘软件开发
pdps连接数据库
中国网络安全行业人才
网络安全机试实操
如何进ca数据库
我国网络安全法具有城外效力
网络安全法 运营机构
不属于数据库的启发式规则
怎么填写王者什么区什么服务器
网络安全管理机构体系
大学生做网络安全专业好吗
涉及外币的数据库价格字段
软件开发运维标书硬性要求
怎么知道摩尔的服务器
数据库系统采用的模型有哪些
dbcp数据库
软件开发培训南京
有关史料的数据库
景季网络技术工作室
财经类数据库WIND
数据库空值如何表达
nist有哪些数据库
广州升承互联网科技有限公司
分布式数据库 数据分片
服务器硬盘状态显示就绪
数据库什么余
服务器可以给光口配置ip吗