C# List数据批量更新
来源:互联网 发布:企业级sas软件多少钱 编辑:程序博客网 时间:2024/06/12 23:43
针对单条数据一般都是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数据批量更新
- C# 批量插入和更新数据
- C#使用SqlBulkCopy批量更新数据
- C# 数据批量插入及更新
- C#使用SqlBulkCopy批量更新数据
- C#中DataGridView的数据批量更新
- C# 向数据库批量更新数据(插入、更新、删除)
- C#批量更新数据表
- C# SqlDataAdapter.update结合事务(SqlTransaction)批量更新数据
- C#中海量数据的批量插入和更新
- C#中数据的批量插入和更新_Asp.net
- C#中数据的批量插入和更新
- C#中海量数据的批量插入和更新 [顶]
- C#中海量数据的批量插入和更新
- C# Sql Server海量数据批量入库及更新
- C# Oracle海量数据批量入库及更新
- [C#新手入门 二] SqlDataAdapter.Update批量数据更新
- C# Repeater和DataList批量更新数据的方式
- codeforces 748B(水) ACM出线之路
- 使用Android Studio出现的一些问题解决策略
- RecyclerView
- WebService注解
- php 调用ffmpeg获取视频信息
- C# List数据批量更新
- 一点一滴学习Spring(八)之Spring数据源配置
- EditText一进入页面就弹出软键盘
- Alluxio简单介绍
- OpenCV 消除平面透视图像的射影失真
- STP手动计算生成树以及STP\RSTP\MSTP的区别
- 神经网络(四)-vanishing gradient problem
- 记录Three.js
- spring-security入门详解