针对单条数据一般都是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数据批量更新的更多相关文章

  1. oracle 批量更新之将一个表的数据批量更新至另一个表

      oracle 批量更新之将一个表的数据批量更新至另一个表 CreationTime--2018年7月3日17点38分 Author:Marydon Oracle 将一个表的指定字段的值更新至另一个 ...

  2. mysql 常用命令,连接数据库,查看建表语句,批量导入数据,批量更新数据,连接查询

    1. 1)MySQL 连接本地数据库,从cmd中进入mysql命令编辑器: root root分别为用户名和密码 mysql -uroot -proot 2)MySQL 连接本地数据库,用户名为“ro ...

  3. PHP框架 Laravel Eloquent ORM 批量插入数据 && 批量更新目前没有

    foreach ($products as $v=>$a) { $count[] = array('product_name' => $a['name'], 'product_weight ...

  4. oracle存储过程实现根据已有数据批量更新另一批数据

    declare CURSOR l_c IS select col1,col2 from table1; Begin FOR i IN l_c LOOP dbms_output.put_line(i.c ...

  5. sql server多表数据批量更新

    update wset w.TagCount=x.TagCountfrom (select ItemID,COUNT(*) as TagCount from r where IsValid=1 gro ...

  6. 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 ...

  7. Neo4j 第五篇:批量更新数据

    相比图形数据的查询,Neo4j更新图形数据的速度较慢,通常情况下,Neo4j更新数据的工作流程是:每次数据更新都会执行一次数据库连接,打开一个事务,在事务中更新数据.当数据量非常大时,这种做法非常耗时 ...

  8. mybatis学习之路----批量更新数据两种方法效率对比

    原文:https://blog.csdn.net/xu1916659422/article/details/77971696/ 上节探讨了批量新增数据,这节探讨批量更新数据两种写法的效率问题. 实现方 ...

  9. 一个简单的批量更新oracle 数据库中 最近的服务商名称的数据

    有一个需求是这样的,我们需要更新数据库中的数据,数据时这样的 1.大约50万以上 2. 数据中有较多的重复数据 3. 需要将表中最近的代理商的名称赋值给行中的服务商名称 4. 代理商的名称可能有多个, ...

随机推荐

  1. django的admin后台管理如何更改为中文

    新建Django的admin后端控制为英文显示,为了可以使其显示中文,可以将 setting.py配置文件修改 # LANGUAGE_CODE = 'en-us' # # # # # TIME_ZON ...

  2. java 实现将java对象转为yaml文件

    首先我们建两个类,以下两个类展示的是一个学生拥有多个手机号码联系人. 先是学生类: package com.ming.yaml.beans; import java.util.ArrayList; i ...

  3. C# 获取所有网卡信息

    private void Form1_Load(object sender, EventArgs e) { //获取说有网卡信息 NetworkInterface[] nics = NetworkIn ...

  4. window 8 电脑操作服务集合(网址)

    如何开启Win8远程桌面 http://jingyan.baidu.com/album/48206aeae06627216ad6b3bf.html?picindex=2 Win8.1用户账户的配置管理 ...

  5. java输入输入流图解

  6. CorelDRAW2019新耀发布会,报名即可领红包!

    ​30年时光荏苒!眨眼风惊雨过. 在1989年的春天,CorelDRAW 1.0正式发布,一经面世就掀起了图形设计行业革命浪潮,这个图形工具不仅给设计师提供了矢量图像.页面设计,更能应用于网站制作.位 ...

  7. class path resource [processes/] cannot be resolved to URL because it does not exist

    springboot整合activiti时报以下错误,原因是项目启动时检查流程文件 nested exception is java.io.FileNotFoundException: class p ...

  8. https://blog.csdn.net/cddcj/article/details/52193932

    https://blog.csdn.net/cddcj/article/details/52193932 兼容性

  9. javascript中的计算题

    一.js中的数据类型共六种: 值类型五种:Boolea   Number  String  Null  undefined 引用类型:Object ----三大引用类型:Object   Array  ...

  10. 复习MySQL④查询功能、连接方式、联合查询

    用select语句查询: select〈目标列组〉 from〈数据源〉 [where〈元组选择条件〉] [group by〈分列组〉[having 〈组选择条件〉]] [order by〈排序列1〉〈 ...