1

我正在从 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 [...]

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

4

3 回答 3

3

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

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

编辑
另外,尝试设置CommandType4(即adCmdStoredProc):

CMDInsForm.CommandType = 4

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

于 2012-11-30T17:41:09.817 回答
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.
于 2013-06-20T07:51:34.873 回答
0

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

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

代替 :

set parm = CMDInsForm.CreateParameter ("matl_no", ...
于 2012-11-30T17:40:59.820 回答