Stored procedures 经典的ASP、VBScript连接问题,

Stored procedures 经典的ASP、VBScript连接问题,,stored-procedures,vbscript,asp-classic,Stored Procedures,Vbscript,Asp Classic,下面是一些经典的Asp VB脚本,我正在尝试修改它,以便在windows 2012服务器上运行它。(我知道它是旧的don't ask:()。这在我们的旧2003框上工作,但它使用的库在2012年不受支持。我现在使用存储过程发送此电子邮件。我面临的问题是,当我连接sMailBody字符串时,我必须有一些”或“语法不允许它连接。当我Response.Write(strRSs)时,我得到字符串,但所有HTML都呈现出来 EXEC[dbo].[MailPackage]'test@test.com', '

下面是一些经典的Asp VB脚本,我正在尝试修改它,以便在windows 2012服务器上运行它。(我知道它是旧的don't ask:()。这在我们的旧2003框上工作,但它使用的库在2012年不受支持。我现在使用存储过程发送此电子邮件。我面临的问题是,当我连接
sMailBody
字符串时,我必须有一些
”或“
语法不允许它连接。当我
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
作为消息正文传递到存储过程中。

假设要将
sMailBody
中的占位符
{*~BACKGROUND~*}
替换为
会话(“LiveURL”)的内容。

改变

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

基本规则:

  • 需要3个字符串参数
  • 字符串文字中的双引号必须由“”转义
  • VBScript不会将变量内容插入/拼接为字符串文字
  • 连接空字符串-
    &“
    ”-是浪费时间
  • 其他替换行已编译,但是否缺少
    Next

    更新感谢@Lankymart的评论:

    …假设您希望将
    sMailBody
    中的占位符
    {*~BACKGROUND~*}
    替换为
    会话的单引号内容(“LiveURL”)

    原始代码中的错误以及我对jackncode意图的可能错误解释表明,通过串联构建字符串会给表达式增加太多噪音,很容易弄乱。请参阅wrt在.Run或.Exec的命令行中输入引用的路径和其他参数的数百万个问题

    在这种情况下,编写函数进行“拥抱”是值得的,这样你就可以处理复杂的有趣字母:

    >> 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">
    
    >函数q(s):q=“”&s&“”:结束函数
    >>函数qq(s):qq=“”&s&“:结束函数
    >>s=“x”
    >>t=“”
    >>WScript.Echo替换(t,“@”,q(s))
    >>WScript.Echo替换(t,“@”,qq)
    >>
    

    (cf.)

    取决于他们是否想要
    “'”&Session(“LiveURL”)和“
    ”,这是我的猜测。@Lankymart-谢谢你指出了
    “”Session(“LiveURL”)和“
    ”的更可能的解释;我相应地更新了我的答案。
    >> 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">