经典ASP,VBScript连接问题,

时间:2014-07-09 18:20:41

标签: stored-procedures vbscript asp-classic

下面是一些我试图改变的经典Asp VB脚本,所以我可以让它在我的Windows 2012服务器上运行。 (我知道它的老唐不会问:()。这在我们旧的2003年的盒子上工作,但它使用的库在2012年不支持。我现在使用存储过程发送这封电子邮件。我面临的问题是,当我连接sMailBody字符串时,我必须有一些不允许它连接的' or "语法。当我Response.Write(strRSs)我得到字符串但所有的HTML呈现。

EXEC [dbo].[MailPackage] 'test@test.com', 'tteesstt@ttessttt.com', 'tset' {visible HTML}

      for x = 0 to uBound(aRecipientID)
            '-- Plugin real content
            sMailBody = Replace(sMailBody,"{*~BACKGROUND~*}","'"Session("LiveURL")&"")
            sMailBody = Replace(sMailBody,"{*~HEADER~*}",Session("LiveURL")&"images/testing.jpg")
            sMailBody = Replace(sMailBody,"{*~BODY~*}",sBody)
            sMailBody = Replace(sMailBody,"{*~URL~*}",Session("LiveURL") & "/viewpackage.asp?p=" & sPackageKey & "&u=" & aRecipientID(x) & "&s=" & nSendID&"'")

     Dim strRS 
    strRS = "EXEC [dbo].[MailPackage] " + "'" +  aRecipientEmail(x) + "', '" + Session("FromAddress") + "',  '" + sSubject + "', '" + sMailBody + "'"
   Response.Write(sMailBody)
   Response.Write(strRS)
    Set Conn = Server.CreateObject("ADODB.Connection")
    Conn.Open  Session("ConnectionString")

    Conn.Execute strRS

如何更正语法,以便将sMailBody作为我的邮件正文传递到我的存储过程中。

1 个答案:

答案 0 :(得分:1)

假设您要将{*~BACKGROUND~*}中的占位符sMailBody替换为Session("LiveURL")的内容:

变化

sMailBody = Replace(sMailBody,"{*~BACKGROUND~*}","'"Session("LiveURL")&"")

sMailBody = Replace(sMailBody, "{*~BACKGROUND~*}", Session("LiveURL"))

基本规则:

  1. Replace需要3个字符串参数
  2. 字符串文字中的双引号必须由""
  3. 转义
  4. VBScript不会将变量内容插入/拼接成字符串文字
  5. 连接空字符串 - & "" - 是浪费时间
  6. 其他替换行编译,但是没有Next丢失?

    感谢@ Lankymart的评论

    ...假设您要将{*~BACKGROUND~*}中的占位符sMailBody替换为Session("LiveURL")单引号内容...

    原始代码中的错误以及我对jackncode意图的错误解释表明,通过连接构建字符串会使表达式产生如此多的噪音,以至于很容易搞砸。查看将引用的路径和其他参数放入.Run或.Exec的命令行中的数百万个问题。

    对于这种情况,编写执行“拥抱”功能的功能是值得的。这样你DRY就会发出有趣的字母:

    >> Function q(s) : q = "'" & s & "'" : End Function
    >> Function qq(s) : qq = """" & s & """" : End Function
    >> s = "x"
    >> t = "<tag attr=@>"
    >> WScript.Echo Replace(t, "@", q(s))
    >> WScript.Echo Replace(t, "@", qq(s))
    >>
    <tag attr='x'>
    <tag attr="x">
    

    (参见here