用于在SQL Server中调用存储过程的ASP参数

时间:2014-06-02 22:35:02

标签: sql-server parameters asp-classic ado

我尝试在SQL Server中调用此存储过程来插入数据。

我有这个:

CREATE PROCEDURE [dbo].[AddUser]
   @user_id bigint,
   @user_name varchar(20)
AS
BEGIN
   INSERT INTO [users] ([id], [name]) 
   VALUES (@user_id, @user_name)
END

我有这个ASP代码:

<%
Const adCmdStoredProc = 4
Const adBigInt = 20
Const adParamInput  = 1
Const adVarChar     = 200

Set conn = Server.CreateObject("ADODB.Connection")
connectionstring = "Provider=SQLOLEDB.1;Password=***********;Persist Security Info=True;User ID=sa;Initial Catalog=Test;Data Source=AREAWEB2-PC"
conn.Open connectionstring
Set cmd = Server.CreateObject("ADODB.Command")
Set cmd.ActiveConnection = conn

cmd.CommandType = adCmdStoredProc
cmd.CommandText = "{call AddUser (?,?)}"

frm_id = 1
frm_name = "Carlos"

Set prmUserId = cmd.CreateParameter("@user_id", adBigInt, adParamInput, 0, frm_id)
Set prmUserName = cmd.CreateParameter("@user_name", adVarChar, adParamInput, 20, frm_name)

Cmd.Parameters.Append prmUserId
Cmd.Parameters.Append prmUserName

Set rs = cmd.Execute 


%>

但我收到此错误消息:

  

用于SQL Server的Microsoft OLE DB提供程序错误&#39; 80040e10&#39;

有什么问题?

2 个答案:

答案 0 :(得分:1)

如果您Google the error code 80040e10很快就会发现问题是以下与您的参数定义有关的问题之一;

  

来自Why do I get 80040E10 errors?

Microsoft OLE DB Provider for SQL Server error '80040e10' 
Procedure '' expects parameter '', which was not supplied.

您的问题可能是由于在0参数中传递@user_id大小,因为所有参数都必须使用.CreateParameter()或在向集合中附加参数之前传递最大大小使用.Size属性。


  

<强>更新

     

由于OP has pointed out问题实际上是由于设置了错误的CommandType属性值。

     

认为值得扩大答案来解释原因。原因是OP示例中的CommandType设置为adCmdStoredProc.CommandText属性未设置为存储过程名称,这是纠正此(而不是删除.CommandType)是更改.CommandText,如下所示;

     
cmd.CommandText = "AddUser"
     

另一种选择是将.CommandType更改为adCmdText,这将接受{call AddUser (?,?)}格式。

     
cmd.CommandType = adCmdText
     

内部ADO对adCmdText adCmdStoredProc使用CommandTypeEnum,因为.CommmandText将更改为{call AddUser (?,?)}格式,区别在于您无法使用此表单除非你指定.CommandType = adCmdText,否则你自己。使用任何一个都没有额外的好处,但在我看来adCmdStoredProc只是简化了调用并隐藏了你的基本要素。

答案 1 :(得分:-2)

代码失败,因为我有这些错误:

cmd.CommandType = adCmdStoredProc

删除它,有效。