我尝试在插入数据的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
%>
但我收到此错误消息:
Microsoft OLE DB提供程序的SQL Server错误'80040e10'
怎么了 ?
如果您使用Google错误代码,80040e10
那么很快就会发现问题出在以下与您的参数定义有关的问题之一:
SQL Server错误“ 80040e10”的Microsoft OLE DB提供 程序过程“需要参数”,但未提供。
您的问题很可能是由于0
在@user_id
参数中传递了大小,因为所有参数都必须使用.CreateParameter()
或在将参数附加到使用using.Size
属性添加到集合中之前传递最大大小。
更新:
正如OP指出的,问题实际上是由于设置了错误的
CommandType
属性值。认为有必要扩大答案以解释原因。原因是
CommandType
在OP的示例中将设置为,adCmdStoredProc
但未将.CommandText
属性设置为存储过程的名称,更正此错误(而不是删除.CommandType
)的最简单方法是更改.CommandText
;cmd.CommandText = "AddUser"
另一个选择是将更
.CommandType
改为adCmdText
接受格式{call AddUser (?,?)}
。cmd.CommandType = adCmdText
内部ADO使用
adCmdText
的adCmdStoredProc
CommandTypeEnum
作为.CommmandText
将得到改变的格式{call AddUser (?,?)}
,不同的是你自己,除非你指定你不能用这种形式.CommandType = adCmdText
。使用这两种方法都没有任何其他好处,但是我认为adCmdStoredProc
这只是简化了通话并向您隐藏了细节。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句