SqlDataAdapter 批量更新 DataTable

复制代码
   /// <summary>
        /// 统计接口调用次数
        /// </summary>
        public void UpdateInterfaceClickCount()
        {
            DataRow[] arrRows = updateTable.Select(string.Format("name='{0}'", InterfaceName));
            if (arrRows.Length > 0)
            {
                DataRow row = arrRows[0];
                row.BeginEdit();
                row["click_count"] = (int)row["click_count"] + 1;
                row.EndEdit();
            }
            else
            {
                DataRow dr = updateTable.NewRow();
                dr["name"] = InterfaceName;
                dr["click_count"] = 1;
                dr["version"] = appversion;
                updateTable.Rows.Add(dr);
            }

            if (updateTable.Rows.Count < 2) return;
            new InterfaceCallDal().BatchUpdate(updateTable, updateTable.Rows.Count);
            updateTable.Clear();
        }
复制代码
复制代码
        /// <summary>
        /// 批量更新
        /// </summary>
        /// <param name="dataTable"></param>
        /// <param name="batchSize">获取或设置一个值,该值启用或禁用批处理支持,并指定可以批处理执行的命令的数目。</param>
        public void BatchUpdate(DataTable dataTable, Int32 batchSize)
        {
            try
            {
                dataTable.AcceptChanges();
                foreach (DataRow row in dataTable.Rows)
                {
                    row.SetModified();
                }

                // Assumes GetConnectionString() returns a valid connection string.
                string connectionString = ConfigHelper.SQLConnection;

                // Connect to the AdventureWorks database.
                using (var connection = new SqlConnection(connectionString))
                {
                    // Create a SqlDataAdapter.
                    var adapter = new SqlDataAdapter
                    {
                        UpdateCommand = new SqlCommand("update test_table SET click_count=click_count+@click_count WHERE name=@name and version=@version and app_type='app' ", connection)
                    };

                    // Set the UPDATE command and parameters.
                    adapter.UpdateCommand.Parameters.Add("@click_count", SqlDbType.Int, 4, "click_count");
                    adapter.UpdateCommand.Parameters.Add("@name", SqlDbType.VarChar, 128, "name");
                    adapter.UpdateCommand.Parameters.Add("@version", SqlDbType.VarChar, 10, "version");
                    //adapter.UpdateCommand.UpdatedRowSource = UpdateRowSource.None;

                    // Set the batch size.
                    //adapter.UpdateBatchSize = 0;

                    // Execute the update.
                    adapter.Update(dataTable);

                }

            }
            catch
            {
                //ingore
            }

        }
复制代码

 

posted @ 2016-12-21 15:04  FH1004322  阅读(1395)  评论(0)    收藏  举报
编辑推荐:
· C23和C++26的#embed嵌入资源指南
· 「EF Core」框架是如何识别实体类的属性和主键的
· 独立开发,这条路可行吗?
· 我在厂里搞 wine 的日子
· 如何通过向量化技术比较两段文本是否相似?
阅读排行:
· 他没买 iPad,而是花了半年时间,为所有“穷学生”写了个笔记神器
· Visual Studio 现已支持新的、更简洁的解决方案文件(slnx)格式
· 只需一行命令,Win11秒变Linux开发主机!
· 上周热点回顾(7.7-7.13)
· 也是出息了,业务代码里面也用上算法了。
点击右上角即可分享
微信分享提示