如何用SQL Server 2005存储过程实现IP地址归属地查询

这篇文章主要介绍“如何用SQL Server 2005存储过程实现IP地址归属地查询”,在日常操作中,相信很多人在如何用SQL Server 2005存储过程实现IP地址归属地查询问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何用SQL Server 2005存储过程实现IP地址归属地查询”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

  1、用C#来做DLL,代码如下:

usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Data.SqlTypes;usingSystem.Data.SqlClient;usingMicrosoft.SqlServer.Server;publicclassAddrInfo[Microsoft.SqlServer.Server.SqlProcedure]publicstaticvoidgetAddrInfo(SqlStringip,outSqlStringinfo)using(SqlConnectionconnection=newSqlConnection("contextconnection=true"))//IP地址转为数字string[]tmp=ip.Value.Split(newstring[]{"."},StringSplitOptions.None);Int64ipn=ToInt(ToBinary(tmp[0])+ToBinary(tmp[1])+ToBinary(tmp[2])+ToBinary(tmp[3]));connection.Open();SqlCommandcmd=newSqlCommand();cmd.Connection=connection;cmd.CommandType=System.Data.CommandType.Text;cmd.CommandText="selectaddr_infofromCZIPwhereipn1<="+ipn.tostring()+"andipn2>="+ipn.ToString();SqlDataReaderdr=cmd.ExecuteReader();using(dr)if(dr.Read())info=dr.GetString(0);elseinfo="<无归属地数据>";}}//////INT32转为二进制字符串/////////privatestaticStringToBinary(stringnum)intpiNumber=Int32.Parse(num);stringstrBinary="";intiTmp;doiTmp=piNumber%2;strBinary=iTmp.ToString()+strBinary;piNumberpiNumber=piNumber/2;}while(piNumber!=0);returnstrBinary.PadLeft(8,'0');}////////////privatestaticlongToInt(stringpStrBinary)char[]charArr=pStrBinary.ToCharArray();longiReturnValue=0;intiPow=0;for(inti=0;i

  怎样用SQLServer2005存储过程实现IP地址归属地查询

  2、将编译后的DLL放到SQLSERVER2005所在的服务器上,假设路径为c:\clr\ipLib.dll以下方法注册程序集。

CREATEASSEMBLY[ipLib]FROM'c:\clr\ipLib.dll'

  3、创建存储过程

CREATEPROCEDUREget_ip_addr_info@ipnvarchar(20),@infonvarchar(500)OUTPUTASEXTERNALNAMEipLib.AddrInfo.getAddrInfo

  之后你就可以看到名为get_ip_addr_info的存储过程,调用方法与普通T/SQL存储过程相同。

到此,关于“如何用SQL Server 2005存储过程实现IP地址归属地查询”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!