无法将字符串传递给存储过程

时间:2016-11-08 02:22:04

标签: stored-procedures vbscript asp-classic adodb

这是我的存储过程...

alter PROCEDURE ReplyToEmailConfirmation 
    @uniqueKey varchar(36)
AS
BEGIN

Print 'Hello World!'
END

这是代码......

Set cmd = Server.CreateObject("ADODB.Command")
With cmd
    .ActiveConnection = getConfigValue("ASPClassicConnectionString")
    .CommandType = adCmdStoredProc
    .CommandText = "[ReplyToEmailConfirmation]"

    .Parameters.Append .CreateParameter("@uniqueKey", adVarChar, adParamInput, 36, "dc8d8bfd-ea3a-4ad9-9f2d-92831eb2655a")

End With

cmd.Execute

这是错误......

  

ADODB.Command错误' 800a0bb9'

     

参数类型错误,超出可接受的范围,或者是   相互冲突。

我如何让它工作?目的是使用adGUID,但我想我会尝试adVarChar缩小错误范围。

2 个答案:

答案 0 :(得分:3)

如果你read the documentation for CreateParameter()变得清晰;

  

如果在Type参数中指定可变长度数据类型,则必须先传递Size参数或设置Parameter对象的Size属性,然后再将其附加到Parameters集合;否则,会发生错误。

当您传递VARCHAR “可变长度”数据类型时,您必须在调用Size时指定CreateParameter()

Dim cmd

Set cmd = Server.CreateObject("ADODB.Command")
With cmd
    'Let the cmd deal with the connection.
    .ActiveConnection = getConfigValue("ASPClassicConnectionString")
    .CommandText = "[ReplyToEmailConfirmation]"
    .CommandType = adCmdStoredProc
    Call .Parameters.Append(.CreateParameter("@uniqueKey", adVarChar, adParamInput, 100))
    .Parameters("@uniqueKey") = "dc8d8bfd-ea3a-4ad9-9f2d-92831eb2655a"
End With
Call cmd.Execute()

'Tidy up memory
Set cmd = Nothing

还包括adCmdStoredProc adCmdUnknown,它告诉ADO将此命令解释为存储过程调用,没有它,默认值为ADODB.Connection,这意味着ADO必须尝试锻炼命令是的,虽然很小但增加了不必要的开销。

也不是实例化ADO.Command对象只是为了执行ADODB.Connection对象的忠实粉丝,这意味着你必须自己管理关闭ADODB.Command。而是让getConfigValue("ASPClassicConnectionString")为你做,通过传递一个连接字符串让它创建连接并自行销毁它。假设ActiveConnection返回连接字符串,您可以将其直接传递给ADODB.CommandMETADATA将实例化连接并处理它。

有用的链接

  • CommandType (解释如何使用import React, { Component } from 'react'; class Example extends Component { componentDidMount() { document.addEventListener('deviceready', this.deviceReady); } componentWillUnmount() { document.removeEventListener('deviceready', this.deviceReady); } deviceReady () { // Do some stuff } render() { return ( <div> <p>Example</p> </div> ); } } export default Example; 包含命名常量)

答案 1 :(得分:0)

我没有为adovbs.incadCmdStoredProcadVarChar常量添加adGUID。卫生署。