1

我從Classic ASP插入到SQL Server 2005數據庫表中的一行。爲什麼我會得到'程序或函數期望參數'?

我得到以下錯誤:

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

我提供的參數。類型匹配,我仍然得到這個錯誤。這是用於插入的經典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 [...] 

我完全難住了。有沒有人有任何建議它可能是什麼,或只是在黑暗中拍攝?我不在乎它聽起來有多瘋狂。

+0

.CreateParameter(「@matl_no」不起作用? – bummi

+0

@bummi不,我有同樣的錯誤 –

回答

2

我認爲你需要的參數名稱的開頭的 「@」:

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

編輯
另外,嘗試將CommandType設置爲4(即adCmdStoredProc):

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", ... 
+0

我得到了同樣的錯誤:/ –

0

如果不希望發送參數到您的SP(在一定條件下),你可以通過指定NULL值初始化像

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

默認值您SP參數你的參數,你不會得到這個錯誤

Procedure or function 'replace_matl_form_insert' expects parameter '@matl_no', which was not supplied. 
相關問題