QQ纯真IP数据库转换成ACCESS数据库方便ASP使用的办法
其实这类软件网上已经有很多了,大家要找IP转换在论坛里一搜也有一大把,这里是给大家讲一下如何自己手动来创建自己想要的IP数据库!
如何把“纯真IP库”转换为其它格式呢?过程可能有些复杂,请大家指教!
转换前要具备的工具软件:
Microsoft SQL Server 2000
UltraEdit
Microsoft Access(想转换为Access格式必需)
转换前要具备的基本知识:
较熟练的使用以上工具!如果你一点都不会,那么下面的文字你看起来就有些费劲了!
如果不会 SQL Server 2000也应该可以,只是效率会很低!
1、先到下载最新的“纯真IP库”,可以到 http://www.cz88.net/fox/ 去下载最新版本。
2、将“纯真IP库”解压,用showip.exe将IP库导出为文本。用UltraEdit打开(千万不要用记事本打开,否则你会后悔的)。
将文本最后几行非IP的部分删掉。
将其中的“,”(英文的逗号)全部替换为“ ”(一个空格),多替换几次,直到出现“搜索的字符串未找到!”为止。
再将其中的“ ”(两个连续的空格),全部替换为“ ”(一个空格),多替换几次,直到出现“搜索的字符串未找到!”为止。
(你可以将其中“ CZ88.NET”的部分也替换掉,不建议这样做。)
保存!
这样就达到了最基本的要求。
(为什么有这一步,直接将它转到Access中不就可以了嘛?如果可以的话我在这里说这么多干什么?)
3、将第二步中得到的文本文件导入到SQL Server 2000中。
文本限定符设为“无”
分隔符选其它,用“ ”(一个空格),这就是我们在第二步中做的。
这样它会生成一张如下结构的表:
Create TABLE [dbo].[ip] (
[Col001] [varchar] (8000) COLLATE Chinese_PRC_CI_AS NULL , [Col002] [varchar] (8000) COLLATE Chinese_PRC_CI_AS NULL , [Col003] [varchar] (8000) COLLATE Chinese_PRC_CI_AS NULL , [Col004] [varchar] (8000) COLLATE Chinese_PRC_CI_AS NULL , [Col005] [varchar] (8000) COLLATE Chinese_PRC_CI_AS NULL , [Col006] [varchar] (8000) COLLATE Chinese_PRC_CI_AS NULL , [Col007] [varchar] (8000) COLLATE Chinese_PRC_CI_AS NULL , [Col008] [varchar] (8000) COLLATE Chinese_PRC_CI_AS NULL , [Col009] [varchar] (8000) COLLATE Chinese_PRC_CI_AS NULL , [Col010] [varchar] (8000) COLLATE Chinese_PRC_CI_AS NULL , [Col011] [varchar] (8000) COLLATE Chinese_PRC_CI_AS NULL ) |
下面这段SQL很重要,否则会出City字段会为Null
Alter TABLE [dbo].[ip] ADD
CONSTRAINT [DF_ip_Col001] DEFAULT (' ') FOR [Col001], CONSTRAINT [DF_ip_Col002] DEFAULT (' ') FOR [Col002], CONSTRAINT [DF_ip_Col003] DEFAULT (' ') FOR [Col003], CONSTRAINT [DF_ip_Col004] DEFAULT (' ') FOR [Col004], CONSTRAINT [DF_ip_Col005] DEFAULT (' ') FOR [Col005], CONSTRAINT [DF_ip_Col006] DEFAULT (' ') FOR [Col006], CONSTRAINT [DF_ip_Col007] DEFAULT (' ') FOR [Col007], CONSTRAINT [DF_ip_Col008] DEFAULT (' ') FOR [Col008], CONSTRAINT [DF_ip_Col009] DEFAULT (' ') FOR [Col009], CONSTRAINT [DF_ip_Col010] DEFAULT (' ') FOR [Col010], CONSTRAINT [DF_ip_Col011] DEFAULT (' ') FOR [Col011] GO |
这还不够,我们要计算IP,要将它转换为数字,那么我们还要建一张表:
Create TABLE [dbo].[Dv_ip] (
[Col001] [varchar] (15) COLLATE Chinese_PRC_CI_AS NULL , [Col002] [varchar] (15) COLLATE Chinese_PRC_CI_AS NULL , [Col003] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL , [Col004] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL , [Col005] [int] NULL , [Col006] [int] NULL , [Col007] [int] NULL , [Col008] [decimal](10, 0) NULL , [Col009] [int] NULL , [Col010] [int] NULL , [Col011] [int] NULL , [Col012] [decimal](10, 0) NULL ) |
(高手可以写存储过程来省去这张表,但我个人认为这样要来的简单)
4、以下的这些就是核心部分了。
要一步一步的执行,不要做一次执行了!
/*
查询表Dv_ip,ip中的记录条数 */ select count(*) from Dv_ip select count(*) from ip /* /* /* update dv_ip set col009 = charindex('.',col002,0) update dv_ip set col008 = CONVERT(decimal,substring(col001,1,col005-1))*16777216 + CONVERT(decimal,substring(col001,col005+1,col006-col005-1))*65536 + CONVERT(decimal,substring(col001,col006+1,col007-col006-1))*256 + CONVERT(decimal,right(col001,len(col001)-col007))-1 /* select max(dbo.StrBitLen(col003)) as ipmaxlen003 from ip /* set @StrLen = len(@TheStr) while(@StrLen>=@i) |
不知道大家看明白了没有,过程显得是有点啰嗦,不过也希望大家能够提出自己的更好的DIY方法,从中享受DIY的乐趣!
利用MS SQL Server可以将数据导出成多种数据格式,包括通用的SQL insert语句,当然常用的数据格式都是没有问题的,如Access,excle,txt,cvs……
还可以根据你的需要导出你所选择的数据,如某个区段的IP,某个城市的IP
这就要去体验Ms SQL Server的强大功能了
from:http://www.yici.net/content/text_all/text_235_1.html
版权声明:
作者:Kiyo
链接:https://www.wkiyo.cn/html/2008-01/i401.html
来源:Kiyo's space
文章版权归作者所有,未经允许请勿转载。
共有 0 条评论