我尝试在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;
有什么问题?
答案 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
删除它,有效。