QQ IP纯真数据库导入到SQL的操作步骤——原创

1、下载:下载最新的ip数据库(QQ纯真IP数据库)
2、解压缩:解压缩数据库到文本文件(IP数据库.txt)
3、替换:用替换工具把文本文件中的:CZ88.NET 给换掉(如:未知地区)
    文本的末尾可能有两三行空行说明该ip库的一些信息,最好把这删除
4、导入到数据库:新建Access数据库,导入数据,选择文本文件,自动出来导入向导
   这里选择固定宽度来分割字符的方式(带分隔符、固定宽度),下一步,下一步
   选择新建表的方式保存数据,下一步(提示输入每个的字段名等),
   分别命名成:IPStar,IPEnd,AreaInfo(设置该字段的时候一定在高级选项中把
   这个字段设置长点:如200),添加一个Id主键,完成。  
5、用SQL来处理数据变成我们需要的数据:首先现导入数据到SQL中,这里相信到家都会了  
    为了数据看起来更顺畅,这里在查询分析器里用这样的语句:
   update IPInfo set AreaInfo=replace(AreaInfo,'未知地区','')
   update IPInfo set AreaInfo='未知地区' where AreaInfo=''
6、转化Ip成数字类型:
   网上有不少文章介绍的是利用程序来处理这个事情,不过测试过太耗时间,不大现实
   更有有效的方式是通过sql查询分析器执行操作,不用几分钟的事情就搞定了。
   首先先给表IPInfo加几个临时字段:
    int类型:IPStar1,IPStar2,IPStar3,IPStar4,IPEnd1,IPEnd2,IPEnd3,IPEnd4
    varchar(16)类型:IPStarNew,IPEndNew
   语句如下:写得麻烦了点,肯定有更好的方法,不过暂时现实现下想要的东西

/*取IP的第一个*/
update IPInfo set
IPStar1=substring(IPStar,0,charindex('.',IPStar)),
IPStarNew=substring(IPStar,charindex('.',IPStar)+1,len(IPStar)),
IPEnd1=substring(IPEnd,0,charindex('.',IPEnd)),
IPEndNew=substring(IPEnd,charindex('.',IPEnd)+1,len(IPEnd))
/*取IP的第一个*/

/*取IP的第二个*/
update IPInfo set
IPStar2=substring(IPStarNew,0,charindex('.',IPStarNew)),
IPStarNew=substring(IPStarNew,charindex('.',IPStarNew)+1,len(IPStarNew)),
IPEnd2=substring(IPEndNew,0,charindex('.',IPEndNew)),
IPEndNew=substring(IPEndNew,charindex('.',IPEndNew)+1,len(IPEndNew))
/*取IP的第二个*/

/*取IP的第三个*/
update IPInfo set
IPStar3=substring(IPStarNew,0,charindex('.',IPStarNew)),
IPStarNew=substring(IPStarNew,charindex('.',IPStarNew)+1,len(IPStarNew)),
IPEnd3=substring(IPEndNew,0,charindex('.',IPEndNew)),
IPEndNew=substring(IPEndNew,charindex('.',IPEndNew)+1,len(IPEndNew))
/*取IP的第三个*/

/*取IP的第四个*/
update IPInfo set
IPStar4=substring(IPStarNew,charindex('.',IPStarNew)+1,len(IPStarNew)),
IPStarNew='',
IPEnd4=substring(IPEndNew,charindex('.',IPEndNew)+1,len(IPEndNew)),
IPEndNew=''
/*取IP的第四个*/

/*把IP转成数字类型*/
update IPInfo set
IPStar=256*256*256*IPStar1+256*256*IPStar2+256*IPStar3+IPStar4,
IPEnd=256*256*256*IPEnd1+256*256*IPEnd2+256*IPEnd3+IPEnd4
/*把IP转成数字类型*/

操作完之后再把刚刚添加的那几个临时字段删除
OK到这里位置就把IP纯真数据变成弄想要的可以用来查询的数据了


存储过程:
CREATE PROCEDURE [IPInfo_Load]
@UserIP bigint
 AS
select AreaInfo from IPInfo where IPStar <=@UserIP and @UserIP<=IPEnd
GO

 

程序:
string IPArr="";
if (Request.ServerVariables["HTTP_VIA"] != null)
{
     IPArr = Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();
}
else
{
   IPArr = Request.ServerVariables["REMOTE_ADDR"].ToString();
}
string[] IPArr = Ipstr.Split('.');
long UserIP = 256 * 256 * 256 * long.Parse(IPArr[0]) + 256 * 256 * long.Parse(IPArr[1]) + 256 * long.Parse(IPArr[2]) + long.Parse(IPArr[3]);
DataSet IPds = new Configs().GetIPInfo(UserIP);
if (IPds.Tables[0].Rows.Count > 0)
     AreaInfo = IPds.Tables[0].Rows[0]["AreaInfo"].ToString();

转载于:https://www.cnblogs.com/wjg121/archive/2008/12/19/1358754.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值