Asp classic 返回作用域_IDENTITY(),而不使用CreateParam
我正在尝试此操作,但得到一个错误Asp classic 返回作用域_IDENTITY(),而不使用CreateParam,asp-classic,vbscript,adodb,Asp Classic,Vbscript,Adodb,我正在尝试此操作,但得到一个错误ADODB。当对象关闭时,不允许执行记录集错误“800a0e78”操作。在带有此代码的行上如果ScopeID.EOF,则 请不要回答使用CreateParam方法,寻找没有此方法的解决方案。谢谢 <% set Cmd = Server.CreateObject("ADODB.Command") Cmd.ActiveConnection = conn Cmd.CommandText = "INSERT INTO TABLE (NA
ADODB。当对象关闭时,不允许执行记录集错误“800a0e78”操作。
在带有此代码的行上如果ScopeID.EOF,则
请不要回答使用CreateParam
方法,寻找没有此方法的解决方案。谢谢
<%
set Cmd = Server.CreateObject("ADODB.Command")
Cmd.ActiveConnection = conn
Cmd.CommandText = "INSERT INTO TABLE (NAME) VALUES ('test') SELECT SCOPE_IDENTITY() AS ID"
Cmd.CommandType = 1
Cmd.CommandTimeout = 0
Cmd.Prepared = true
Set ScopeID = Cmd.Execute()
If ScopeID.EOF Then
Response.Write "There was an Error in your request, Please try again"
Response.End
Else
ID= ScopeID(0).Value
End IF
ScopeID.Close
Set ScopeID = Nothing
Set Cmd = Nothing
Response.Write ID
%>
您的连接打开了吗?这似乎就是错误消息所抱怨的。无法对关闭的连接执行命令。将查询分为两部分:
INSERT INTO TABLE (NAME) VALUES ('test'); SELECT SCOPE_IDENTITY() AS ID
注意代码>。我认为您的查询的第二部分没有执行。请尝试以下操作:
Cmd.CommandText = "SET NOCOUNT ON; INSERT INTO TABLE (NAME) VALUES ('test'); SET NOCOUNT OFF; SELECT SCOPE_IDENTITY() AS ID"
据我所知,如果SETNOCOUNT ON未将实际insert语句“隐藏”,SQL Server将返回一个(空)记录集。我认为错误消息指的是正在关闭的记录集,而不是连接 在命令完成后应用.NextRecordSet()
:
<%
set Cmd = Server.CreateObject("ADODB.Command")
Cmd.ActiveConnection = conn
Cmd.CommandText = "INSERT INTO TABLE (NAME) VALUES ('test') SELECT SCOPE_IDENTITY() AS ID"
Cmd.CommandType = 1
Cmd.CommandTimeout = 0
Cmd.Prepared = true
Set ScopeID = Cmd.Execute()
ScopeID.NextRecordSet() // <---- Fix
If ScopeID.EOF Then
Response.Write "There was an Error in your request, Please try again"
Response.End
Else
ID= ScopeID(0).Value
End IF
ScopeID.Close
Set ScopeID = Nothing
Set Cmd = Nothing
Response.Write ID
%>
如果您运行的是SQL Server的现代版本(我想是在wards上的2005),那么可以使用output子句:
Cmd.CommandText = "insert into [dbo].[test] (name) output inserted.id values ('test')"
是否应使用set Cmd.ActiveConnection=conn
设置连接?不,没有set
部分可以正常工作。检查下面链接中Robert Wagner的回复,您会说没有打开连接的错误将出现在set ScopeID=Cmd.Execute()上
line?我相信错误消息听起来像是一个关闭的连接。当您显式打开连接时,此错误是否消失?对于关闭的记录集,会给出相同的消息。在本例中,查询不会返回打开的记录集,因此,在尝试评估EOF时出现了错误。Set ScopeID=ScopeID。NextRecordSet()是为我做的