取得IP字符串后,我习惯性的把它转成数字。在 mysql 里可以用 INET_ATON 和 INET_NTOA 这两个函数来转,结果是一个 Integer 类型的数字, Integer 是 INT 的一个别名。
比如
INET_ATON('120.138.16.204') 结果是 2022314188,但是在.NET里,用 ip.Address 取得的却是:3423636088
INET_ATON('127.0.0.1') 的结果是 2130706433 但在.NET 里,ip.Address 取得的却是 16777343
一开始我忽略了这个问题,在本地的SQLServer 里,我用的是 INT 类型(最大值是 2147483647),测试的时候,由于 ip 一直是 127.0.0.1 所以没出问题。但是放到服务器后,却报:
Failed to convert parameter value from a Int64 to a Int32.
at System.Data.SqlClient.SqlParameter.Validate(Int32 index, Boolean isCommandProc)
我把服务器上的 对应的字段类型改成 BIGINT,还是报同样的错。
很郁闷,因为报的错误里,没有指出具体是哪个地方出错。
在 .NET 里 ip.Address 是个 long 类型的数据。
我用的是SubSonic 的版本是:1.0.5.0 , 估计是它把 long 对应成 Int32 了。
把 ip.Address 用 decimal 类型的变量存储后,在试,终于正常了。
| < Prev | Next > |
|---|



