C# List数据批量更新
针对单条数据一般都是update语句直接更新
例如:update UserTable set UserName='小名' where userid=xxx
但是如果是针对List数据组进行更新的话不外乎两种
1、程序for、foreach、while循环语句然后多次请求数据库更新(这种在这里不多做解释,因为基本上都知道这种方法)
2、重点说下下面这种方式:通过XML的方式在数据库进行批量的更新
1、建立ListToXML方法
/// <summary>
/// 使用反射把List<T>转换成XmlDocument
/// </summary>
/// <returns></returns>
public static XmlDocument ListToXML<T>(string XmlName,IList<T> IL)
{
try
{
XmlDocument XMLdoc = new XmlDocument();
//建立XML的定义声明
XmlDeclaration XMLdec = XMLdoc.CreateXmlDeclaration("1.0", "utf-8", null);
XMLdoc.AppendChild(XMLdec);
XmlElement Root = XMLdoc.CreateElement(XmlName);
PropertyInfo[] PropertyInfos = typeof(T).GetProperties();
foreach (T item in IL)
{
XmlElement ChildNode = XMLdoc.CreateElement(typeof(T).Name);
foreach (PropertyInfo pro in PropertyInfos)
{
if (pro != null)
{
string KeyName = pro.Name;
string KeyValue = string.Empty;
if (pro.GetValue(item, null) != null)
{
KeyValue = pro.GetValue(item, null).ToString();
}
ChildNode.SetAttribute(KeyName,KeyValue);
ChildNode.InnerText = KeyValue;
}
}
Root.AppendChild(ChildNode);
}
XMLdoc.AppendChild(Root);
return XMLdoc;
}
catch(Exception ex)
{
//LogHelper.LogDebug("List<T>生成XML失败:" + ex.Message);
return null;
}
}
2、将写好的XMl直接当作参数@Data传入存储过程
public int UpdateAdminUsers(IList<AdminUserInfo> adminUsers)
{
SqlParameter[] param = new SqlParameter[1];
//拼接xml
string data = XMLHelper.ListToXML<AdminUserInfo>("AdminUserList", adminUsers).InnerXml.Replace("encoding=\"utf-8\"", "");
param[0] = new SqlParameter("@Data", data);
object o = SqlHelper.ExecuteScalar(DataHelper.ConnectionString, CommandType.StoredProcedure, "USP_AdminUsersUpdate", param);
return Convert.ToInt32(o);
}
3、数据库的分析XMl然后进行数据的处理
Create PROCEDURE [dbo].[USP_AdminUsersUpdate]
@Data XML
AS
BEGIN
SET XACT_ABORT ON;
BEGIN TRANSACTION
DECLARE @RowCount AS INT=0;
DECLARE @AdminUserList TABLE(
[UserId] [int] NOT NULL,
[UserName] [nvarchar](50) NULL
);
INSERT @AdminUserList (UserId ,UserName )
SELECT T.c.value('@UserId','int') as UserId,
T.c.value('@UserName','nvarchar(50)') as UserName
FROM @Data.nodes('AdminUserList/AdminUserInfo') T(c);
INSERT dbo.AdminUser ( UserId , UserName )
SELECT UserId ,UserName FROM @AdminUserList;
SET @RowCount=@@ROWCOUNT;
COMMIT TRANSACTION
SELECT @RowCount AS RowsCount;
END
这种更新方式是将我们数据写成XML有效避免了参数无限次的输入
C# List数据批量更新的更多相关文章
- oracle 批量更新之将一个表的数据批量更新至另一个表
oracle 批量更新之将一个表的数据批量更新至另一个表 CreationTime--2018年7月3日17点38分 Author:Marydon Oracle 将一个表的指定字段的值更新至另一个 ...
- mysql 常用命令,连接数据库,查看建表语句,批量导入数据,批量更新数据,连接查询
1. 1)MySQL 连接本地数据库,从cmd中进入mysql命令编辑器: root root分别为用户名和密码 mysql -uroot -proot 2)MySQL 连接本地数据库,用户名为“ro ...
- PHP框架 Laravel Eloquent ORM 批量插入数据 && 批量更新目前没有
foreach ($products as $v=>$a) { $count[] = array('product_name' => $a['name'], 'product_weight ...
- oracle存储过程实现根据已有数据批量更新另一批数据
declare CURSOR l_c IS select col1,col2 from table1; Begin FOR i IN l_c LOOP dbms_output.put_line(i.c ...
- sql server多表数据批量更新
update wset w.TagCount=x.TagCountfrom (select ItemID,COUNT(*) as TagCount from r where IsValid=1 gro ...
- Sql Server数据批量更新
UPDATE S SET S.[name]=T.[name],S.[sch_id]=T.[sch_id],S.[sex]=T.[sex],S.[isOk]=T.[isOk] FROM [Student ...
- Neo4j 第五篇:批量更新数据
相比图形数据的查询,Neo4j更新图形数据的速度较慢,通常情况下,Neo4j更新数据的工作流程是:每次数据更新都会执行一次数据库连接,打开一个事务,在事务中更新数据.当数据量非常大时,这种做法非常耗时 ...
- mybatis学习之路----批量更新数据两种方法效率对比
原文:https://blog.csdn.net/xu1916659422/article/details/77971696/ 上节探讨了批量新增数据,这节探讨批量更新数据两种写法的效率问题. 实现方 ...
- 一个简单的批量更新oracle 数据库中 最近的服务商名称的数据
有一个需求是这样的,我们需要更新数据库中的数据,数据时这样的 1.大约50万以上 2. 数据中有较多的重复数据 3. 需要将表中最近的代理商的名称赋值给行中的服务商名称 4. 代理商的名称可能有多个, ...
随机推荐
- LeetCode.884-两句话中不常见的单词(Uncommon Words from Two Sentences)
这是悦乐书的第338次更新,第362篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第207题(顺位题号是884).我们给出了两个句子A和B.(一个句子是一串空格分隔的单词 ...
- [BZOJ1041]圆上的整点
嗯... 自己看视频讲解? >Click Here< #include<cstdio> #include<queue> #include<iostream&g ...
- Python-操作符和表达式
//: 除后向下取正 -3//2=-2 **: 幂 3**3 = 27 not: ! and: && or: || 除了以上几个之外,其余与C++相同 length = 3 widt ...
- WPF播放器
最近由于工作需要,需要做一个播放软件,在网上参考了很多例子,园子里有很多代码.其中最多的就是wpf自带的MediaElement控件,或者VLC视频播放器. 先附我自己查询资料的链接: MediaEm ...
- 5.26 Quartz任务调度图解
- Java接口中的成员变量为什么必须声明为public static final?
我想对于每个Java程序员来说,接口都不陌生,接口中的方法也经常使用.而接口中的成员变量,就显得用得少一点,而对于成员变量为什么必须声明为public static final,可能就更不清楚了,而且 ...
- iconfont在ios(safari)中的坑
最近公司决定将项目图标整体迁移到iconfont,按网上常规方法,在安卓.pc端都没问题,唯独在ios的safari浏览器及微信内置浏览器中,iconfont始终在正常位置向下偏移,导致图标错乱. 网 ...
- Deutsch lernen (11)
1. anwesend a. 出席的,在场的 ~ abwesend Es waren gegen 50 Leute anwesend. 2. gespannt a. (心情)急切的,急于想知道的:紧张 ...
- SQL Server存储过程作业(二)
阶段1:练习——统计某类型客房的入住客人人数 需求说明 使用存储过程统计在指定类型的客房入住客人的总人数 提示: 存储过程的输入参数是指定的客房类型名称 USE Hotel GO --阶段1:查询入住 ...
- Vs2010删除空白行
在copy了别人的代码之后,出现了大量的空白行,批量删除空白行方法为: 查找内容:^:b*$\n 替换为: 查找范围:当前文档 使用:正则表达式