我正在尝试此操作,但在使用此代码ADODB.Recordset error '800a0e78' Operation is not allowed when the object is closed.
If ScopeID.EOF Then
请不要回答使用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
%>
答案 0 :(得分:5)
试试这个:
Cmd.CommandText = "SET NOCOUNT ON; INSERT INTO TABLE (NAME) VALUES ('test'); SET NOCOUNT OFF; SELECT SCOPE_IDENTITY() AS ID"
据我所知,如果SET NOCOUNT ON没有“隐藏”,SQL Server会为实际的insert语句返回一个(空)记录集。我认为错误消息是指关闭的记录集,而不是连接。
答案 1 :(得分:3)
在命令之后应用.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
%>
答案 2 :(得分:1)
如果您正在运行SQL Server的现代版本(我认为这是关于病房的2005),您可以使用输出子句:
Cmd.CommandText = "insert into [dbo].[test] (name) output inserted.id values ('test')"
答案 3 :(得分:0)
你的连接是否开放?看起来这就是错误消息所抱怨的内容。您无法对已关闭的连接执行命令。
答案 4 :(得分:0)
将您的查询分为两部分:
INSERT INTO TABLE (NAME) VALUES ('test'); SELECT SCOPE_IDENTITY() AS ID
注意;
。我认为你的查询的第二部分没有被执行。