我上面的计算实际上是使用客户的IP地址来获得客户的位置,原理就是“追捕”程序!
代码如下:
首先是做一个Fonciton函数
-----------------------------------------------------Function UserSource(sip As string) As String 
            
   '定义基本连接对象
   Dim strConn As string=("Provider= Microsoft.Jet.OLEDB.4.0;DataSource="+Server.MapPath("address.mdb"))
   Dim objConn As New OleDbConnection(strConn)
   Dim strCommand As String
   Dim objAdapter As New OleDbDataAdapter (strCommand,objConn)
   Dim objDataSet As New DataSet()
            
   '开始判断
   If sip="127.0.0.1" Then
     sip="192.168.0.1"
   End IF
            
   Dim str1 As String
   Dim str2 As String
   Dim str3 As String
   Dim str4 As String
            
   Dim strCountry As String
   Dim strCity As String
            
   str1=left(sip,instr(sip,".")-1)
   sip=mid(sip,instr(sip,".")+1)
   str2=left(sip,instr(sip,".")-1)
   sip=mid(sip,instr(sip,".")+1)
   str3=left(sip,instr(sip,".")-1)
   str4=mid(sip,instr(sip,".")+1)
            
   '判断变量里面是否是可以转换的数字型字符串
   IF isNumeric(str1)=True OR isNumeric(str2)=True OR isNumeric(str3)=True OR isNumeric(str4)=True Then      Dim lngNum As Long
      lngNum=((cint(str1))*256*256*256)+((cint(str2))*256*256)+((cint(str3))*256)+((cint(str4)))-1
                    
      设定查找数据库语句
      strCommand="SELECT Top 1 country,city from address where ip1 <=" & lngNum & "AND ip2>= "& lngNum &""
              
      Try
              
         objConn.Open()
         objAdapter.Fill(objDataSet,"address")
              
      Catch objError As Exception
              
         UserSource="您的IP地址数据找不到或者出现错误!"
         OutErr.Text=objError.Message & objError.Source
              
      End Try
              
      strCountry=objDataSet.Tables("address").Rows(0).Item("country")
      strCity=objDataSet.Tables("address").Rows(0).Item("city")
              
      UserSource=lngNum1 & "**" & lngNum2 & "**" & lngNum3 & "**" & lngNum4
                      
   Else
              
     UserSource="您的地址数据未知!" 
                          
   End IF
            
   objConn.Close()
   objConn=Nothing
   objAdapter=Nothing
   objDataSet=Nothing         
          
End Function
-------------------------------------------------
程序的代码到了这个地方:   str1=left(sip,instr(sip,".")-1)
   sip=mid(sip,instr(sip,".")+1)
   str2=left(sip,instr(sip,".")-1)
   sip=mid(sip,instr(sip,".")+1)
   str3=left(sip,instr(sip,".")-1)
   str4=mid(sip,instr(sip,".")+1)已经成功的把192.168.0.1这样的IP地址转化成为
str1=192 str2=168  str3= 0 str4= 1但是运行下面的算术表达式:
lngNum=((cint(str1))*256*256*256)+((cint(str2))*256*256)+((cint(str3))*256)+((cint(str4)))-1
就出现“System.OverflowException: 算术运算导致溢出。”错误!

解决方案 »

  1.   

    在C#里好像默认为整形(int)如果是长整形后面还要加一个L!VB.net我不太清楚!
    你再把它转换成长整形看看,
      

  2.   

    注意,我的这个语句:
    UserSource=lngNum1 & "**" & lngNum2 & "**" & lngNum3 & "**" & lngNum4是我写的调试语句,我的VS.net的调试功能我不会用:-(
    我只好用语句显示变量的内容,我刚才忘记删除了,大家不要看这个语句!~
      

  3.   

    改为
    lngNum1=(CLng(str1))*256*256*256
      

  4.   

    对呀,我刚才也是这么想,试了一下,可以的,并不是long型变量放在下你的数,而是计算机在运算时会以整形数来做为临时变量来存储计算的中间结果,则会溢出,但如果如tacchan所写,则计算机会以LONG形做为中间变量的存储类型,
      

  5.   

    成功了,给分!!谢谢大家,尤其是:
    tacchan(tacchan)
    mygodness(狂风) 两位~!!