【问题标题】:How can I pass the entire query results to another page or shell script in ASP?如何将整个查询结果传递到 ASP 中的另一个页面或 shell 脚本?
【发布时间】:2021-10-04 13:51:31
【问题描述】:

我在 ASP Classic 中工作,需要将查询的返回值传递给 shell 脚本。目前我可以将单个变量传递给脚本,但我需要传递所有变量。

将它们全部传递到另一个asp页面可能是相同的语法。 这里显示的代码太多了,但这里是 SQL 命令:

set dbEDIEetsRs = dbEDIEets.execute(SQL_STMT)

从这里 IK 可以将单个变量传递给其他页面,如下所示:

response.write "<TD WIDTH='10.00%' BORDERCOLOR=" & vCOLR & "><FONT COLOR=BLUE SIZE=-1><A HREF=details.asp?PID=" & dbEDIEetsRs.fields("PROC_SEQ_NO").Value & ">" & dbEDIEetsRs.fields("TP_NAME").Value & "</A></FONT></TD>"

或者像这样的shell脚本:

vBaseCommand="c:\progra~1\putty\plink.exe -ssh -l " & vUser & " -pw " & vPwd & " -hostkey " & vHostKey & " " & vHost & " "
vParms="'" & vFileName & "' '" & vISAID & "' '" & vISACtrl & "' '" 
& vGSID & "' '" & vGSCtrl & "' '" & vSTCtrl & "' 2>&1"
vCommand=vBaseCommand & vROOTDIR & "/bin/get_set.sh " & vParms

仅供参考,上述变量是通过此页面传递并通过以下方式请求的:

    vFileName = request("FileName")

所以我现在需要做的就是将整个结果传递给一个 shell 脚本和/或页面。在上面调用脚本的示例中,我需要 vParms=dbEDIEetsRs(*) 表示整个 shebang。

此请求背后的原因:用户请求特定日期之间数据列表的第一页。这个请求的结果被发送到另一个列出数据的页面。我现在需要将此数据列表发送到 shell 脚本,在其中查找每个文件并将其压缩以供用户下载。

谢谢

【问题讨论】:

标签: asp-classic


【解决方案1】:

显然空格是传递参数的很多问题,所以我使用 server.encode 将它们传递给 Bash shell 脚本:

vBaseCommand="c:\progra~1\putty\plink.exe -ssh -l " & vUser & " -pw " & vPwd & " -hostkey " & vHostKey & " " & vHost & " "
   
   vSQL_STMT_ENC = Server.UrlEncode(vSQL_STMT)
   vSQL_STMT_IB_ENC = Server.UrlEncode(vSQL_STMT_IB)
   vSQL_STMT_OB_ENC = Server.UrlEncode(vSQL_STMT_OB)
   vORDERBY_ENC = Server.UrlEncode(vORDERBY)
   vEDIDIR_ENC = Server.UrlEncode(vEDIDIR)
   vZIPFILENAME = "BULK_DATA_" & vDateString & ".zip"

   vParms="'" & vSQL_STMT_ENC & "' '" & vSQL_STMT_IB_ENC & "' '" & vSQL_STMT_OB_ENC & "' '" & vORDERBY_ENC & "' '" & vEDIDIR_ENC & "' '" & vZIPFILENAME & "' 2>&1"

   vCommand=vBaseCommand & vScriptDir & "gis_download_data.sh " & vParms
   Set wshShell = Server.CreateObject("WScript.Shell")
  Set wshExec = wshShell.Exec(vCommand)

然后在 shell 脚本中,我使用这段代码来解码数据。到目前为止一切正常。

function urldecode() { : "${*//+/ }"; echo -e "${_//%/\\x}"; }
SQL_STMT_ORIG_DECODED=$(urldecode "$SQL_STMT_ORIG")
SQL_STMT_IB_DECODED=$(urldecode "$SQL_STMT_IB")
SQL_STMT_OB_DECODED=$(urldecode "$SQL_STMT_OB")
ORDERBY_DECODED=$(urldecode "$ORDERBY")

谢谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-04
    • 1970-01-01
    • 2012-10-15
    • 2020-11-30
    • 1970-01-01
    • 1970-01-01
    • 2013-05-07
    • 1970-01-01
    相关资源
    最近更新 更多