日期:2014-05-17  浏览次数:21050 次

asp第一次调用存储过程,有点问题,帮忙看一下。
纯粹是为了学习,表很简单,表名test,就一个test字段,char(10)
存储过程如下
CREATE PROCEDURE [testinsertnew] 
@test [char](10)
AS
SET NOCOUNT ON
INSERT INTO [test]([test])
VALUES (@test)
GO

asp文件如下
<!--#include file="conn.asp"-->
<!--#include file="adovbs.inc"-->
<%
test="abc"
Dim oCommand
Dim oRs

Set oCommand = Server.CreateObject("Adodb.Command")
Set oRs = Server.CreateObject("Adodb.Recordset")
Set oCommand.ActiveConnection = Conn
oCommand.CommandType = adCmdStoredProc
oCommand.CommandText = "testinsertnew"

oCommand.Parameters.Append oCommand.CreateParameter("test", adChar, adParamInput, 10)
oCommand.Parameters.Append oCommand.CreateParameter("returncode", adInteger, adParamReturnValue, 4)
'Set each input parameter's value here...

With oRs
.CursorType = 3
.LockType = 3
.CursorLocation = 3
End With

Set oRs = oCommand.Execute()

'Close and Dispose Object
Set oCommand = Nothing
%>

提示错误
[Microsoft][ODBC SQL Server Driver][SQL Server]过程 'testinsertnew' 需要参数 '@test',但未提供该参数。
Set oRs = oCommand.Execute()这个地方有毛病。
什么问题呢??

------解决方案--------------------
oCommand.Parameters.Append oCommand.CreateParameter("@test", adChar, adParamInput, 10)
------解决方案--------------------
1,在你的存储过程中只有一个参数
oCommand.Parameters.Append oCommand.CreateParameter("returncode", adInteger, adParamReturnValue, 4)
这是一个错误,如果改存储过程也可写成
oCommand.Parameters.Append oCommand.CreateParameter("@returncode",3,2)
3是整型
2是adparaminput输出

2,
oCommand.Parameters.Append oCommand.CreateParameter("test", adChar, adParamInput, 10)
要改成
oCommand.Parameters.Append oCommand.CreateParameter("@test",200,2,10)
200代表字符串
2是输出

你也可以在前面预定义常量
adCmdSPStoredProc = 4 
adParamReturnValue = 4 
adParaminput = 1 
adParamOutput = 2 
adInteger = 3 
adVarChar = 200 

试试吧