【问题标题】:Binary IP Search in Classic ASP经典 ASP 中的二进制 IP 搜索
【发布时间】:2013-12-09 22:59:26
【问题描述】:

我有一个包含 CIDR 块的表,我已将它们转换为二进制的 StartIP 和 EndIP (4)。我想使用用户提供的 IP (IPV4) 搜索该表并返回 IP 位于 StartIP 和 EndIP 之间的任何记录。

背景见:Convert IP to 32-bit Binary in TSQL

以下在 TSQL 中有效(返回 1 条记录):

declare @Binary varbinary(25)
select @Binary = MyDB.dbo.fnBinaryIPv4Start('204.228.241.25')

select field1, field2 from MyDB.dbo.MyTable WHERE (@Binary >= IPStartBinary AND @Binary <= IPEndBinary)

但是,这不会在 Classic ASP 中返回任何记录:

Set cmd = Server.CreateObject("ADODB.Command")
            cmd.CommandType = adCmdText
            cmd.ActiveConnection =objConn

            strSQL2 = "SELECT MyDB.dbo.fnBinaryIPV4Start(?)"

            'IP Parameter
            cmd.Parameters.Append cmd.CreateParameter("@IP",adVarChar,adParamInput,15,strIP)
            cmd("@IP") = strIP

            cmd.CommandText = strSQL2
            strBinary = cmd.Parameters(0)

            Set cmd = Server.CreateObject("ADODB.Command")
            cmd.CommandType = adCmdText
            cmd.ActiveConnection = objConn
            cmd.CommandTimeOut = 1200    

            strSQL = "SELECT field1, field2 FROM MyDB.dbo.MyTable WHERE (? >= IPStartBinary AND ? <= IPEndBinary) "
            cmd.Parameters.Append (cmd.CreateParameter("IP", adVarBinary, adParamInput, 50, strBinary))
            cmd.Parameters.Append (cmd.CreateParameter("IP", adVarBinary, adParamInput, 50, strBinary))
        End If

cmd.CommandText = strSQL
set objRS = cmd.Execute
if not objRS.EOF then
arrMyResults = objRS.GetRows()
strMyRewultsUbound = UBound(arrMyResults,2)
end if

objRS.close
set objRS = nothing

有什么建议吗?

谢谢!

【问题讨论】:

  • 我不明白你的 asp 代码的第一部分?你从不执行strSQL2?所以你永远不会将ip作为二进制文件?尝试 Response.write strBinary 变量
  • 哈!多么愚蠢的错误!非常感谢您的帮助!
  • 如果您将评论转换为答案,我将接受它作为我的答案...
  • 我建议将 SQL 转换为接受单个参数(IP 作为字符串)并返回记录集的存储过程。然后,您可以将 ASP 代码简化为单个命令执行 (adCmdStoredProc)。

标签: sql-server asp-classic


【解决方案1】:

我不明白你的 asp 代码的第一部分?你从不执行strSQL2?所以你永远不会将ip作为二进制文件?尝试 Response.write strBinary 变量

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-22
    • 2017-08-10
    • 2015-05-18
    • 1970-01-01
    • 2010-10-02
    相关资源
    最近更新 更多