批次更新UpdateBatchSize

 在 ADO.NET 2.0 中,DataAdapter 公开了 UpdateBatchSize 属性。将 UpdateBatchSize 设置为正整数值将使对数据库的更新以指定大小的批次进行发送。例如,如果将 UpdateBatchSize 设置为 10,会将 10 个独立的语句组合在一起并作为一批提交。将 UpdateBatchSize 设置为 0 将导致 DataAdapter 使用服务器可以处理的最大批次的大小。如果将其设置为 1,则禁用批量更新,因为此时每次发送一行。
  执行非常大的批次可能会降低性能。因此,在实现应用程序之前,应测试最佳的批次大小设置。
  使用 UpdateBatchSize 属性
  启用了批量更新后,DataAdapter 的 UpdateCommand、InsertCommand 和 DeleteCommand 的 UpdatedRowSource 属性值应设置为 None 或 OutputParameters。在执行批量更新时,命令的 FirstReturnedRecord 或 Both 的 UpdatedRowSource 属性值无效。

//dt 数据有10000笔,batchSize=5000,每次以5000笔数据更新到数据库,共分批2次更次。

ContractedBlock.gif ExpandedBlockStart.gif Code
   public static void BatchInsert(DataTable dt, int batchSize)
        {
            
string strConn = ConfigurationManager.ConnectionStrings["DataConnectionString"].ConnectionString;

            
string sql = "INSERT INTO Rework " (CardNo,Customer,CardType,DataFileName,CustomerData,PageNo,CustomerId,CardDate,InsertDate)";
            sql = sql + " VALUES(@CardNo,@Customer,@CardType,@DataFileName,@CustomerData,@PageNo,@CustomerId,@CardDate,@InsertDate)";
            
using (SqlConnection conn = new SqlConnection(strConn))
            {
                SqlDataAdapter da 
= new SqlDataAdapter();
                da.InsertCommand 
= new SqlCommand(sql, conn);
                da.InsertCommand.Parameters.Add(
"@CardNo", SqlDbType.NVarChar, 50"CardNo");
                da.InsertCommand.Parameters.Add(
"@Customer", SqlDbType.NVarChar, 50"Customer");
                da.InsertCommand.Parameters.Add(
"@CardType", SqlDbType.NVarChar, 50"CardType");
                da.InsertCommand.Parameters.Add(
"@DataFileName", SqlDbType.NVarChar, 50"DataFileName");
                da.InsertCommand.Parameters.Add(
"@CustomerData", SqlDbType.NVarChar, 1000"CustomerData");
                da.InsertCommand.Parameters.Add(
"@PageNo", SqlDbType.BigInt, 8"PageNo");
                da.InsertCommand.Parameters.Add(
"@CustomerId", SqlDbType.NVarChar, 20"CustomerId");
                da.InsertCommand.Parameters.Add(
"@CardDate", SqlDbType.NVarChar, 10"CardDate");
                da.InsertCommand.Parameters.Add(
"@InsertDate", SqlDbType.DateTime, 8"InsertDate");

                da.InsertCommand.UpdatedRowSource 
= UpdateRowSource.None;
                da.InsertCommand.CommandTimeout 
= 0;
                da.UpdateBatchSize 
= batchSize;
                da.Update(dt);

            }

        }

 

转载于:https://www.cnblogs.com/ike_li/archive/2009/11/25/1610374.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值