在数据库操作中,存储过程的应用是非常广泛的。本文我们就介绍一个SQL Server 2005存储过程的应用实例,即用C#做DLL,结合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="<无归属地数据>";}} ///<summary>///INT32转为二进制字符串 ///</summary>///<paramname="piNumber"></param>///<returns></returns>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'); } ///<summary>///</summary>///<paramname="pStrBinary"></param>///<returns></returns>privatestaticlongToInt(stringpStrBinary)char[]charArr=pStrBinary.ToCharArray(); longiReturnValue=0; intiPow=0; for(inti=0;i<charArr.Length;i++) if(charArr[i].ToString()!="0"&&charArr[i].ToString()!="1") {thrownewException("输入字符串格式不正确!");} } for(inti=0;i<charArr.Length;i++) iPow=Convert.ToInt32(charArr[i].ToString()); iReturnValue+=iPow*Convert.ToInt64(Math.Pow(2,charArr.Length-i-1)); } returniReturnValue;}

2、将编译后的DLL放到SQL SERVER 2005所在的服务器上,假设路径为 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地址归属地查询的操作就介绍到这里了,希望本次的介绍能够对您有所收获!

【编辑推荐】

    Oracle 10g数据库查找数据的方法总结在SQL Server数据库中插入图像的实现方法SQL Server数据库对连接字符串的安全性处理Oracle数据库启动参数文件及相关SQL语句简介SQL Server 2008数据库清空数据库日志的代码示例