最近做了一个批量导入功能,长时间运行,没个反馈状态,很容易让人看了心急,产生各种臆想!为了解决心里障碍,写了这么个功能。

通过线程执行导入,并把正在执行的状态存入session,既共享执行状态,通过ajax调用session里的执行状态,从而实现反馈导入状态的功能!

上代码: 前端页面

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>批量导入数据</title>
<style type="text/css">
.pop_body_con { width: 310px; position: fixed; top: 50%; left: 50%; margin-left: -150px; background: #eee; display:none; }
.pop_body_con .pop_head { width: auto; padding: 10px 0; background: #fff; }
.pop_body_con .pop_head a { display: block; color: #717274; font-size: 12px; text-decoration: none; text-align: center; }
.pop_box { width: auto; overflow: hidden; padding: 45px 10px; }
.pop_box .pop_text { float: left; }
.pop_box .pop_text p { padding: 0; margin: 0; font-size: 12px; line-height: 18px; color: #717274;}
.pop_box .progress_bar_con { float: left; width: 220px; position: relative; z-index: 2; }
.pop_box .progress_bar_con p { margin: 0; padding: 0; font-size: 12px; color: #fff; line-height: 18px; width: 100%;
text-align: center; position: absolute; left: 0; top: 0; z-index: 4; }
.pop_box .progress_bar_con .progress_bar_start { width: 100%; height: 18px; background: #C4C0C0; }
.pop_box .progress_bar_con .progress_bar_end { width: 16%; height: 18px; background: #2bd35d; position: absolute; left: 0; top: 0; z-index: 3; }
.pop_box .progress_bar_con { float: left; }
#loading-mask { width: 100%; height: 100%; position: fixed; top: 0px; left: 0px; z-index: 0; background-color: rgba(0, 0, 0, 0.34902); display: none; }
</style>
<script src="ajax-master/jquery.js"></script>
<script>
var MyInterval; $(function () {
$("#startImport").click(function () {
MyInterval = setInterval(getState, 1000);
});
}); function getState() {
$.ajax({
url: "test.aspx",
type: "Post",
data: { action: "getSession" },
success: function (msg) {
if (msg != "null") {
msg = eval('(' + msg + ')');
if (msg.being == 100) {
setProcessBar(1, 1);
$(".pop_body_con").hide();
$("#loading-mask").hide();
clearInterval(MyInterval);
}
else {
$(".pop_body_con").show();
$("#loading-mask").show();
setProcessBar(msg.being, msg.count)
}
}
}
});
} function setProcessBar(exeFlag, exeMax) {
$("#progressbar_text").html(parseInt(roundFun(exeFlag / exeMax, 2) * 100) + "%");
$("#progressbar_bar").attr("style", "width:" + parseInt(roundFun(exeFlag / exeMax, 2) * 100) + "%;");
} function roundFun(number, X) {
X = (!X ? 2 : X);
return Math.round(number * Math.pow(10, X)) / Math.pow(10, X);
}
</script>
</head>
<body style="background-color: #fff;">
<input id="startImport" type="button" value="导入数据" />
<div id="loading-mask" ></div>
<div class="pop_body_con">
<div class="pop_head">
<a href="javascript:;">正在导入…请勿操作!</a>
</div>
<div class="pop_box">
<div class="pop_text">
<p>导入进度:</p>
</div>
<div class="progress_bar_con">
<p id="progressbar_text">0%</p>
<div class="progress_bar_start"></div>
<div class="progress_bar_end" id="progressbar_bar"></div>
</div>
</div>
</div>
</body>
</html>

后台页面:

using System.Linq;
using System.Threading;
using System.Web;
using System.Web.Script.Serialization;
using System.Web.UI;
using System.Web.UI.WebControls; public partial class test : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string action = Request.Form["action"];
if (!string.IsNullOrEmpty(action))
{
Hashtable temp = tmethod();
if (temp == null)
{
Thread trd = new Thread(new ParameterizedThreadStart(insertData));
trd.Start(action);
}
else
{
if (temp["reCode"].ToString() == "")
{ Session.Remove("process");
}
} JavaScriptSerializer ser = new JavaScriptSerializer();
String jsonStr = ser.Serialize(temp);
Response.Write(jsonStr);
Response.End();
}
} public Hashtable tmethod()
{
return (Hashtable)Session["process"];
} private void insertData(object obj)
{
string action = obj.ToString();
int tCount = ;
for (int i = ; i < tCount; i++)
{
Hashtable stateHash = setStateVal(, i, tCount, action);
Session["process"] = stateHash; //存入session,方便共享执行状态
Thread.Sleep();
}
Session["process"] = setStateVal(, tCount, tCount, action);
Thread.CurrentThread.Abort();
} private Hashtable setStateVal(int code, int beingV, int CountV, string action)
{
Hashtable stateHash = new Hashtable();
stateHash["reCode"] = code; //返回状态值
stateHash["being"] = beingV; //正在执行值
stateHash["count"] = CountV; //总值
stateHash["action"] = action; //总值
return stateHash;
}
}

ok,共享完毕!

原文链接:http://www.cnblogs.com/LittleBai/p/6179183.html

交流群:225443677

asp.net 线程批量导入数据,ajax获取执行状态的更多相关文章

  1. asp.net线程批量导入数据时通过ajax获取执行状态

    最近因为工作中遇到一个需求,需要做了一个批量导入功能,但长时间运行没个反馈状态,很容易让人看了心急,产生各种臆想!为了解决心里障碍,写了这么个功能. 通过线程执行导入,并把正在执行的状态存入sessi ...

  2. java使用POI实现Excel批量导入数据

    1.准备工作 1.1 创建模板表头与数据库表字段一一对应,示例如下 1.2将模板放入项目中,如下图所示: 2.前端页面 2.1 使用超链接提供模板下载地址 <html lang="zh ...

  3. Cassandra使用pycassa批量导入数据

    本周接手了一个Cassandra系统的维护工作,有一项是需要将应用方的数据导入我们维护的Cassandra集群,并且为应用方提供HTTP的方式访问服务.这是我第一次接触KV系统,原来只是走马观花似的看 ...

  4. 项目总结04:SQL批量导入数据:将具有多表关联的Excel数据,通过sql语句脚本的形式,导入到数据库

    将具有多表关联的Excel数据,通过sql语句脚本的形式,导入到数据库 写在前面:本文用的语言是java:数据库是MySql: 需求:在实际项目中,经常会被客户要求,做批量导入数据:一般的简单的单表数 ...

  5. csv文件批量导入数据到sqlite。

    csv文件批量导入数据到sqlite. 代码: f = web.input(bs_switch = {})  # bs_switch 为from表单file字段的namedata =[i.split( ...

  6. 使用python向Redis批量导入数据

    1.使用pipeline进行批量导入数据.包含先使用rpush插入数据,然后使用expire改动过期时间 class Redis_Handler(Handler): def connect(self) ...

  7. Redis批量导入数据的方法

    有时候,我们需要给redis库中插入大量的数据,如做性能测试前的准备数据.遇到这种情况时,偶尔可能也会懵逼一下,这里就给大家介绍一个批量导入数据的方法. 先准备一个redis protocol的文件( ...

  8. 批量导入数据到mssql数据库的

    概述 批量导入数据到数据库中,我们有好几种方式. 从一个数据表里生成数据脚本,到另一个数据库里执行脚本 从EXCEL里导入数据 上面两种方式,导入的数据都会生成大量的日志.如果批量导入5W条数据到数据 ...

  9. ADO.NET 对数据操作 以及如何通过C# 事务批量导入数据

    ADO.NET 对数据操作 以及如何通过C# 事务批量导入数据   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 ...

随机推荐

  1. 传统maven项目创建

    转自:https://blog.csdn.net/wangfengtong/article/details/77098238 需求表均同springmvc案例 此处只是使用maven 注意,以下所有需 ...

  2. 域名ip自动跳转 跳转指定页面的js

    域名ip自动跳转 跳转指定页面的js 为了应对百度审核,需要客户的网站在个别地区跳转到另一个页面,就搞到了这段代码,屡试不爽,超实用.下面把地址换成你要访问的网站url地址或者文件url地址即可.超实 ...

  3. WAS域名解析问题

    1.如果dmgr和his在一台机器上,但web服务器用的是app服务器 如下图: 插件都处理完成. 这时候,通过外网域名访问时,出现如下情况 或者 说明:ihs服务器上webserver1的文件Plu ...

  4. 修改fuse库成功

    使用的是fuse-2.9.2 在lib目录下的helper.c的fuse_main_real函数里打印一句话,然后将fuse库编译并install. 对ssfs进行编译,运行后,出现了打印的那句话! ...

  5. 自定义UITabBarController

    用的时候直接拷贝代码即可. 1.在AppDelegate设置跟控制器为:PQTabBarController #import "PQTabBarController.h" @int ...

  6. Mixing Milk

    链接 分析:水题,按照价格从小到大排序,在进行贪心即可 /* PROB:milk ID:wanghan LANG:C++ */ #include "iostream" #inclu ...

  7. node.js适合游戏后台开发吗?

    网站服务器和游戏服务器是怎么样联系到一起的? 百牛信息技术bainiu.ltd整理发布于博客园 1. 游戏分很多种,咱们先来看看MMORPG. 再怎么简单的RPG服务器都免不了处理多人交互的情形,上百 ...

  8. FINDSTR 命令使用详解

    Findstr 使用正则表达式搜索文件中的文本模式. 语法 findstr [/b] [/e] [/l] [/r] [/s] [/i] [/x] [/v] [/n] [/m] [/o] [/p] [/ ...

  9. ML一些零散记录

    朴素贝叶斯的假定条件:变量独立同分布 一般情况下,越复杂的系统,过拟合的可能性就越高,一般模型相对简单的话泛化能力会更好一点,增加隐层数可以降低网络误差(也有文献认为不一定能有效降低),提高精度,但也 ...

  10. emacs编辑c文件时,大括号的跳转(转载)

    转自:http://forum.ubuntu.org.cn/viewtopic.php?f=68&t=26701 `C-M-n' Move forward over a parenthetic ...