【问题标题】:Calling Mysql SP from ASP creates error从 ASP 调用 Mysql SP 会产生错误
【发布时间】:2017-04-04 07:30:44
【问题描述】:

当我尝试从经典 ASP 调用 MySql 存储过程时,我收到此错误:

例程 spAddContactUsEmail 的 OUT 或 INOUT 参数 5 不是 BEFORE 触发器中的变量或 NEW 伪变量

这是 SP(我可以从 Mysql 工作台成功调用):

CREATE DEFINER=`root`@`localhost` PROCEDURE `spAddContactUsEmail`(
    In vcName varchar(50),
    In vcPhone varchar(50),
    In vcEmail varchar(50),
    In txtComments text,
    Out intNewID int
)
BEGIN

    Insert Into contact_us (`Name`, Phone, Email, Comments, DateCreated) 
    Values (vcName, vcPhone, vcEmail, txtComments, now());

    Set intNewID = Last_Insert_ID();

END

这是 ASP 代码:

Dim con
Dim cmd

Set con = Server.CreateObject("ADODB.Connection")
con.Open "connection string" 

Set cmd = Server.CreateObject("ADODB.Command")
cmd.ActiveConnection = con
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "spAddContactUsEmail"

cmd.Parameters.Append cmd.CreateParameter("vcName", adVarChar, adParamInput, 50, "John Doe")
cmd.Parameters.Append cmd.CreateParameter("vcPhone", adVarChar, adParamInput, 50, "333-4444")
cmd.Parameters.Append cmd.CreateParameter("vcEmail", adVarChar, adParamInput, 50, "test@yahoo.com")
cmd.Parameters.Append cmd.CreateParameter("txtComments", adLongVarChar, adParamInput, Len("hey"), "hey")

cmd.Parameters.Append cmd.CreateParameter("intNewID", adInteger, adParamReturnValue)

cmd.Execute

错误发生在 cmd.Execute 行。提前致谢。

【问题讨论】:

  • 包含Execute 方法返回的错误信息详情。
  • 错误消息是:-2147467259,[MySQL][ODBC 5.1 Driver][mysqld-5.7.17-log]例程 spAddContactUsEmail 的 OUT 或 INOUT 参数 5 不是变量或 NEW 伪变量触发前
  • 看来你需要在这里使用adParamOutput设置输出参数:cmd.Parameters.Append cmd.CreateParameter("intNewID", adInteger, adParamOutput, adParamReturnValue)
  • 我做了你提到的改变,但仍然出现同样的错误。
  • 正在使用哪个版本的 MySQL ODBC 驱动程序?一些早期的驱动程序可能不支持OUT参数,在这种情况下你需要使用cmd.CommandText = "CALL spAddContactUsEmail (@vcName, ..., @intNewID)"然后使用相同的连接执行SELECT @intNewID(只是改变命令文本)。

标签: mysql vbscript asp-classic


【解决方案1】:

将 adParamReturnValue 更改为 adParamOutput:

<%
    cmd.Parameters.Append cmd.CreateParameter("intNewID", adInteger, adParamOutput, 4)
%>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多