C#怎么快速批量更新数据库?

C#怎么快速批量更新数据库?,第1张

一般用SqlDataAdapter批量更新就行了,你可以参照下面的代码,另一个可以参考的是这个

http://clingingboy.cnblogs.com/archive/2006/04/29/389039.html

下面代码一次是5000个,具体在你那数值是多少可以测试一下

/// <summary>

/// 批量更新数据(每批次5000)

/// </summary>

/// <param name="connString">数据库链接字符串</param>

/// <param name="table"></param>

public static void Update(string connString, DataTable table)

{

SqlConnection conn = new SqlConnection(connString)

SqlCommand comm = conn.CreateCommand()

comm.CommandTimeout = _CommandTimeOut

comm.CommandType = CommandType.Text

SqlDataAdapter adapter = new SqlDataAdapter(comm)

SqlCommandBuilder commandBulider = new SqlCommandBuilder(adapter)

commandBulider.ConflictOption = ConflictOption.OverwriteChanges

try

{

conn.Open()

//设置批量更新的每次处理条数

adapter.UpdateBatchSize = 5000

adapter.SelectCommand.Transaction = conn.BeginTransaction()/////////////////开始事务

if (table.ExtendedProperties["SQL"] != null)

{

adapter.SelectCommand.CommandText = table.ExtendedProperties["SQL"].ToString()

}

adapter.Update(table)

adapter.SelectCommand.Transaction.Commit()/////提交事务

}

catch (Exception ex)

{

if (adapter.SelectCommand != null &&adapter.SelectCommand.Transaction != null)

{

adapter.SelectCommand.Transaction.Rollback()

}

throw ex

}

finally

{

conn.Close()

conn.Dispose()

}

}

在处理百万级的数据方面,也不一定需要存储过程,用C#一样可以;ADO.NET提供了常用对象即可解决,就是数据适配器,在处理海量数据的时候,表现还是可圈可点的。先指定参数,接着一个循环,例:for (int i = 0i <100i++)

{

dataset.Tables[0].Rows[i].BeginEdit()

dataset.Tables[0].Rows[i]["time"] = "2222-22-22 22:22:22"

dataset.Tables[0].Rows[i]["value"] = 100

dataset.Tables[0].Rows[i]["id"] = "ID"+(i+10000)

dataset.Tables[0].Rows[i].EndEdit()

}接着一次提交更新就OK了数据适配器.Update(dataset.Tables[0])然后释放资源,把数据集合适配器的资源都释放掉,连接也返回池中。dataset.Tables[0].Clear()

适配器.Dispose

dataset.Dispose要注意的是,你在取记录填充到数据集里面的时候,不要一次去提取100万条,那样你的数据库引擎会不堪重负的。要根据你的硬件配置,每次提取适量的数据,如果配置不是很高,一次提取个500-600就行了,这样很快就能把数据在循环中处理完毕而不是卡到CPU暴涨直到死机。

mysql数据库字段内容批量更新:

利用sql中case

when结构可以根据不同的条件批量更新,举例如下:

update

order

set

display_order

=

case

id

when

1

then

'value'

when

2

then

'value'

when

3

then

'value'

end

where

id

in

(1,2,3)

这句sql的意思是,更新display_order

字段,如果id=1

则display_order

的值为3,如果id=2

display_order

的值为4,如果id=3

display_order

的值为5。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/9457157.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存