为什么我得到`过程或函数期望参数`?

时间:2012-11-30 17:39:17

标签: sql sql-server sql-server-2005 stored-procedures asp-classic

我正在从Classic ASP向SQL Server 2005数据库表中插入一行。

我收到以下错误:

  

过程或函数'replace_matl_form_insert'需要参数'@matl_no',这是未提供的。

我正在提供参数。类型匹配,我仍然收到该错误。这是用于插入

的经典asp代码
     set CMDInsForm = Server.CreateObject("ADODB.Command")
     CMDInsForm.ActiveConnection = CONN
     CMDInsForm.CommandText = "dbo.replace_matl_form_insert"

     set parm = CMDInsForm.CreateParameter ("matl_no", adChar, adParamInput, 8, Trim(matl_no))
     CMDInsForm.Parameters.Append parm
     For each X in CMDInsForm.Parameters
          Response.Write err_msg & X.Name & ":" & X.Value & "<BR>"
     Next

     CMDInsForm.Execute

如您所见,我循环显示参数并打印出其名称和值。将打印名称matl_no和正确的值。

以下是检索它的存储过程的一部分。

ALTER PROCEDURE [dbo].[replace_matl_form_insert]
    (@matl_no char(8))
 AS [...]

我完全难过了。是否有任何人有任何建议可能是什么,或者只是在黑暗中拍摄?我不在乎它听起来有多疯狂。

3 个答案:

答案 0 :(得分:3)

我认为在参数名称的开头需要“@”:

set parm = CMDInsForm.CreateParameter ("@matl_no", adChar, adParamInput, 8, Trim(matl_no))

修改
另外,请尝试将CommandType设置为4adCmdStoredProc):

CMDInsForm.CommandType = 4

http://www.w3schools.com/ado/prop_comm_commandtype.asp

答案 1 :(得分:0)

我认为您缺少参数名称中的@。尝试:

set parm = CMDInsForm.CreateParameter ("@matl_no", ...

而不是:

set parm = CMDInsForm.CreateParameter ("matl_no", ...

答案 2 :(得分:0)

如果您不想将参数发送到SP(在某些情况下),您可以将默认值初始化为SP参数,例如

ALTER PROCEDURE [dbo].[replace_matl_form_insert]
    (@matl_no char(8)=NULL)
 AS [...] 

通过为参数指定NULL值,您将不会收到此错误

Procedure or function 'replace_matl_form_insert' expects parameter '@matl_no', which was not supplied.