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  阅读(1392)  评论(0编辑  收藏  举报