使用Ajax分配更新数据库信息,动态显示更新进度。
适用于大批量更新,占用时间较多的更新操作。使用ajax划分为小的单元,不需要一下占用很多系统资源。
需要注意的是必须有一个自动增长的字段,值可以不连续。
示例是将一个字段的内容,包含HTML代码的,先去掉html代码,然后更新到该条记录的另一个字段中。当然你可以把动态页面的代码修改为生成静态页面或者什么之类的操作。
运行结果如下所示~
下面为部分代码,完整代码请点击上面的连接下载
update.ashx
using System;
using System.Web;
using System.Data;
using System.Data.OleDb;
using System.Text.RegularExpressions;
public class update : IHttpHandler {
private bool IsInt(string v)
{
if (v == null) return false;
v = v.Trim();
return Regex.IsMatch(v, @"^/d+$");
}
private string RemoveHTML(string v)
{
if (v == null) return v;
return Regex.Replace(v, " | |&[a-z]+;|'|/"|,|,|//.|。|、|//-|:|:|]+>|//s", "", RegexOptions.Compiled | RegexOptions.IgnoreCase);
}
public void ProcessRequest(HttpContext context)
{
context.Response.Charset = "utf-8";
context.Response.ContentType = "text/html";
HttpRequest Request = context.Request;
string rowIndex = Request.Form["ri"], mr = Request.Form["mr"], Sql = "";
int iRowIndex = 0, iMR = 10;//如果未传递每次生成多少行,则默认10行,如果处理的行号不为整数,默认从第0行开始
if (IsInt(mr)) iMR = int.Parse(mr);
if (IsInt(rowIndex)) iRowIndex = int.Parse(rowIndex);
Sql = "select top " + iMR + " * from(select top " + (iMR * iRowIndex + iMR)
+ " [id],content from info order by [id])tmp order by [id] desc";//注意这里取数据的方式
//==========注意修改驱动
OleDbConnection cn = new OleDbConnection("provider=microsoft.jet.oledb.4.0;data source=" + context.Server.MapPath("~/data.mdb"));
cn.Open();
bool Ok = true;
try
{
DataTable dt = new DataTable();
new OleDbDataAdapter(Sql, cn).Fill(dt);
OleDbCommand cm = new OleDbCommand();
cm.Connection = cn;
string tmp="";
//更新数据的操作,可以修改为你需要的操作,如生成html页面什么的
foreach (DataRow dr in dt.Rows)
{
tmp = RemoveHTML(dr[1].ToString());
if (tmp.Length > 255) tmp = tmp.Substring(0, 255);
cm.CommandText = "update info set purect='" + tmp + "' where [id]=" + dr[0];
cm.ExecuteNonQuery();
}
dt.Dispose();
}
catch { Ok = false; }
cn.Close();
if (!Ok) throw new Exception("操作失败~~~");//抛出错误,让ajax重新执行当前操作
}
public bool IsReusable {
get {
return false;
}
}
}
ouput.html
>
ajax动态批量转换动态body{font-size:14px;}
#proMain{border:solid 1px black;width:400px;height:20px;}
#proMain div{height:100%;width:0%;background:red;color:white;overflow:hidden;line-height:20px;font-size:12px;text-align:center;}
span.r{color:Red;}
-->
#proMain{border:solid 1px black;width:400px;height:20px;}
#proMain div{height:100%;width:0%;background:red;color:white;overflow:hidden;line-height:20px;font-size:12px;text-align:center;}
span.r{color:Red;}