发布于 2016-06-29 01:28:23 | 143 次阅读 | 评论: 0 | 来源: 网友投递

这里有新鲜出炉的精品教程,程序狗速度看过来!

ASP.NET

ASP.NET 是.NET FrameWork的一部分,是一项微软公司的技术,是一种使嵌入网页中的脚本可由因特网服务器执行的服务器端脚本技术,它可以在通过HTTP请求文档时再在Web服务器上动态创建它们。 指 Active Server Pages(动态服务器页面) ,运行于 IIS(Internet Information Server 服务,是Windows开发的Web服务器)之中的程序 。


纯真IP数据库包含最新的IP信息,通过IP我们可以查询访问者的来路,地理位置!但下载下来的IP数据无法被我们直接调用,所以我们需要编写代码将IP写入到数据库中供我们使用!
纯真IP数据包含381085条,可以通过下载的查询软件将数据解压为文本格式,并将其编码改为UTF8,否则在程序中读取中文会乱码!
下面为程序执行分析IP数据并插入到Sql Server的截图:



程序通过AJAX在客户端进行数据插入实时更新:
实现代码如下:
前端页面及javascript:
 
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd“> 
<html xmlns=”http://www.w3.org/1999/xhtml” > 
<head> 
<title>导入IP地址数据库-power by blog.atnet.cc</title> 
<style type=”text/css”> 
body{font-size:14px;} 
#log{border:solid 1px gold;width:400px;height:100px;padding:10px;background:gold;margin-bottom:15px;color:black;} 
#recordLog{font-size:12px;} 
</style> 
<script type=”text/javascript” src=”/scripts/global.js”></script> 
<script type=”text/javascript”> 
var log,reLog; //Log,RecordLog 
var recordCount; //IP记录总数 
window.onload=function(){ 
log=document.getElementById(“log”); 
} 
function startImport(){ 
if(!document.getElementById(“submit_ifr”)){ 
var elem=document.createElement(“iframe”); 
elem.setAttribute(“id”,”submit_ifr”); 
elem.setAttribute(“name”,”ifr”); 
elem.style.cssText=”display:none”; 
document.body.appendChild(elem); 
document.forms[0].target=elem.name; 
} 
document.forms[0].submit(); 
log.innerHTML=”正在上传数据!<br />”; 
return false; 
} 
� 
function insertIP(){ 
log.innerHTML+=”开始分析数据…<br />”; 
j.ajax.post(“/do.ashx?args=ImportIPData&action=init”,”", 
function(x){ 
var d=eval(x)[0]; 
recordCount=d.count; 
log.innerHTML+=”<font color=green>分析数据成功:<br />服务器地址:”+ 
d.server+”,记录:”+recordCount+”条!<br /><div id='recordLog'></div>”; 
//开始插入 
insert(); 
}, 
function(x){log.innerHTML+=”<font color=red>发生异常,已终止!</font>”;} 
); 
} 
function insert(){ 
if(!reLog)reLog=document.getElementById(“recordLog”); 
var num=Math.floor(Math.random()*100); 
j.ajax.post(“/do.ashx?args=ImportIPData&action=insert”,”num=”+num, 
function(x){var d=eval(x)[0];reLog.innerHTML=”已经写入数据:”+(recordCount-d.count)+ 
“条,队列:”+d.count+”条,本次写入:”+d.insertNum+”条”;
if(d.count!=0){insert();} else{reLog.innerHTML=”恭喜,写入完毕!”;} },function(x){alert(x);}); } </script> </head> <body> <div style=”margin:60px 100px”> <div id=”log”>请填写相关数据,选择IP数据文件!</div> <form action=”/do.ashx?args=ImportIPData” method=”post” enctype=”multipart/form-data” target=”ifr”> 数据库IP:<input type=”text” name=”dbserver” value=”.” /><br /> 数据库名:<input type=”text” name=”dbname” value=”tp” /><br /> 数据表名:<input type=”text” name=”tbname” value=”ip” /><br /> 用  户  名:<input type=”text” name=”dbuid” value=”sa” /><br /> 密      码<input type=”password” name=”dbpwd” value=”123000″ /><br /> IP文件:<input type=”file” name=”ipfile” value=”C:\Users\cwliu\Desktop\1.txt” /><br /> <button onclick=”return startImport();”>导入</button> </form> </div> </body> </html>

注:j为一个自定义的javascript类库,中间包含了ajax功能的代码
后台程序我们用来接收ajax发送的Post 请求:
代码如下:
 
File:do.ashx?args=ImportIPData 
public void ProcessRequest(HttpContext context) 
{ 
if (context.Request.RequestType == “POST”) 
{ 
string action = context.Request["action"]; 
//提交IP数据 
if (string.IsNullOrEmpty(action) || action == “submit”) 
{ 
string dbserver = context.Request["dbserver"], tbname = context.Request["tbname"]; 
StringBuilder sb = new StringBuilder(500); 
sb.Append(“server=”).Append(dbserver).Append(“;database=”).Append(context.Request["dbname"]) 
.Append(“;uid=”).Append(context.Request["dbuid"]).Append(“;pwd=”).Append(context.Request["dbpwd"]); 
//保存数据库连接字符串及数据表名 
HttpContext.Current.Session["ip_dbconnstring"] = sb.ToString(); 
HttpContext.Current.Session["ip_tablename"] = tbname; 
//读取IP数据并缓存 
IList<string> ipList = new List<string>(); 
HttpPostedFile file = context.Request.Files[0]; 
using (StreamReader sr = new StreamReader(file.InputStream, Encoding.UTF8)) 
{ 
while (sr.Peek() != -1) 
{ 
ipList.Add(Regex.Replace(sr.ReadLine(), “\\s{2,}”, ” “)); 
} 
} 
HttpRuntime.Cache.Insert(“ip_data”, ipList); 
//想客户端发送数据信息(Json格式) 
sb.Remove(0, sb.Length); 
sb.Append(“[{server:'").Append(dbserver) //服务器地址 
.Append("',count:'").Append(ipList.Count) //IP条数
.Append("',insertNum:0") //本次插入条数
.Append(",taskNum:0") //任务队列条数
.Append("}]“); context.Session["ip_info"] = sb.ToString(); //触发父页面开始插入数据 context.Response.Write(“<script>window.parent.insertIP();</script>”); } else { using (SqlConnection conn = new SqlConnection(context.Session["ip_dbconnstring"] as string)) { string tbname = context.Session["ip_tablename"] as string; //初始化,建表并返回信息 if (action == “init”) { SqlCommand cmd = new SqlCommand(“if not exists(select * from sysobjects where [name]='” + tbname + “‘ and xtype='u')BEGIN CREATE TABLE ” + tbname + “(id BIGINT PRIMARY KEY IDENTITY(1,1),sip NVARCHAR(15),eip NVARCHAR(15),area NVARCHAR(80),[name] NVARCHAR(80))END”, conn); conn.Open(); cmd.ExecuteNonQuery(); context.Response.Write(context.Session["ip_info"]); } //插入数据 else if (action == “insert”) { IList<string> ipList = HttpRuntime.Cache["ip_data"] as IList<string>; StringBuilder sb = new StringBuilder(400); //默认每次插入300条 int insertNum; int.TryParse(context.Request["num"], out insertNum); if (insertNum < 1) insertNum = 300; SqlCommand cmd = new SqlCommand(); cmd.Parameters.AddRange( new SqlParameter[]{ new SqlParameter(“@sip”,null), new SqlParameter(“@eip”,null), new SqlParameter(“@area”,null), new SqlParameter(“@name”,null) }); cmd.Connection = conn; conn.Open(); string[] arr; for (var i = 0; i <= insertNum && i < ipList.Count; i++) { arr = ipList[i].Split(‘ ‘); cmd.CommandText = “if not exists(select id from ” + tbname + ” where sip='”+arr[0]+”‘and eip='”+arr[1]+”‘) INSERT INTO ” + tbname + ” values(@sip,@eip,@area,@name)”; cmd.Parameters["@sip"].Value = arr[0]; cmd.Parameters["@eip"].Value = arr[1]; cmd.Parameters["@area"].Value = arr[2]; cmd.Parameters["@name"].Value =arr.Length>=4?arr[3]:”"; sb.Remove(0, sb.Length); cmd.ExecuteNonQuery(); ipList.Remove(ipList[i]); } sb.Remove(0, sb.Length); sb.Append(“[{count:").Append(ipList.Count) //未插入IP的条数
.Append(",insertNum:").Append(insertNum)
.Append("}]“); context.Response.Write(sb.ToString()); } } } } } }

当处理上面的代码之后IP数据将添加到你的数据库中!总数是38万条添加时间在1个小时左右!
写入到数据库后的截图如下:


最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务