自 SQL 迁移以来 recordset.Movefirst 上不断出现错误 - ASP 经典
Keep getting errors on recordset.Movefirst since SQL migration - ASP Classic
我们正在分阶段将带有旧 MS Access 2000 数据库的 ASP 经典应用程序迁移到更新的语言。我们刚刚将所有 Access 数据迁移到 SQL Server 2012 数据库中。大多数事情似乎都有效,但以下情况除外:rst.movefirst
。
它失败的代码是某种特殊情况。 SQL语句所在的应用程序的这一部分,之前总是在SQL服务器上运行,尽管它在SQL服务器数据库中查询的一些数据也通过 SQL 服务器数据库中的访问链接服务器使用 views
(因此 SQL 服务器具有来自 Access 数据库的视图)。 SQL 服务器迁移唯一改变的是那些使用的视图从链接访问服务器更改为常规 SQL 服务器视图(现在在同一台服务器中) .
无论如何,这曾经是工作代码:
Set spSQL = Server.CreateObject("ADODB.Command")
Set spSQL.ActiveConnection=conSQL
strSQL = "SELECT [tblMMMemos].[EindDatum], [tblMMMemos].[Ontvanger], [tblMMMemos].[Name], [tblMMMemos].[Contact], [tblMMMemos].[Onderwerp], [vwOPSRelaties].[RelatieNaam] FROM [tblMMMemos] INNER JOIN [vwOPSRelaties] ON CONVERT (INT, Substring([tblMMMemos].[recode], 2, Len([tblMMMemos].[recode]))) = [vwOPSRelaties].[RelatieNummer] WHERE [tblMMMemos].[Status] <> ? ORDER BY (CASE WHEN [tblMMMemos].[Name] = ? THEN 1 ELSE 2 END), [tblMMMemos].[Einddatum]"
spSQL.commandtext= strSQL
spSQL.Parameters.Append spSQL.CreateParameter("@Status", adVarWChar,adParamInput,10)
spSQL.Parameters.Append spSQL.CreateParameter("@Name", adVarWChar,adParamInput,50)
spSQL.Parameters("@Status").Value = "Closed"
spSQL.Parameters("@Name").Value = "SYSTEM"
set rst=spSQL.execute(strSQL)
记录集处理如下:
Do While Not rst.EOF OR rst.BOF
'----Do something with the recordset-----
rst.movenext
loop
rst.MoveFirst
自从迁移到 SQL 服务器后,出现错误:
Line 110 Rowset position cannot be restarted.. .
在 rst.MoveFirst
所以我开始阅读并发现它可能是由于多个问题造成的。
所以我开始稍微调整一下代码,网上有一些关于同一个问题的答案。
所以首先我尝试在我的查询中设置 Nocount:
strSQL = "Set Nocount on "
strSQL = strSQL + "MyQuery"
strSQL = strSQL + " set nocount off"
这没有任何效果。其次,我尝试像这样修改我的记录集:
Set cmd = Server.CreateObject("ADODB.Command")
Set cmd.ActiveConnection = conSQL
With cmd
.Commandtext = strSQL
.CommandType = adCmdStoredProc
.Parameters.Append .CreateParameter("@Status", adVarWChar,adParamInput,10)
.Parameters.Append .CreateParameter("@Name", adVarWChar,adParamInput,50)
.Parameters("@Status").Value = "Closed"
.Parameters("@Name").Value = "SYSTEM"
End With
rst.Open cmd, conSQL, adOpenStatic, adLockBatchOptimistic
这也没有任何效果。
最后我只是尝试在没有像下面这样的存储过程的情况下做到这一点:
strSQL = "MyQuery above"
set rst=conSQL.execute(strSQL)
虽然这给了我错误:
Line 106 Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.. .
在 MoveFirst
P.S。正在通过存储过程之前的子引用打开连接,如下所示:
OpenSQL conSQL
在此子中,正在打开连接:
Sub OpenSQL(ByRef conSQL)
Set conSQL = Server.CreateObject("ADODB.Connection")
conSQL.connectionTimeout = 60
ConSQL.CommandTimeout = 0
conSQL.Open "my driver / database"
End Sub
所以现在我不知道下一步该怎么做。任何想法如何解决这一问题?
如果您只能在记录集中向前移动,那么您可能正在打开一个仅向前的记录集。游标设置会影响遍历返回的记录集的方式。
有关详细信息,请参阅以下内容:
光标位置:https://msdn.microsoft.com/en-us/library/ms675802(v=vs.85).aspx
记录集对象:https://msdn.microsoft.com/en-us/library/ms681510(v=vs.85).aspx
我们正在分阶段将带有旧 MS Access 2000 数据库的 ASP 经典应用程序迁移到更新的语言。我们刚刚将所有 Access 数据迁移到 SQL Server 2012 数据库中。大多数事情似乎都有效,但以下情况除外:rst.movefirst
。
它失败的代码是某种特殊情况。 SQL语句所在的应用程序的这一部分,之前总是在SQL服务器上运行,尽管它在SQL服务器数据库中查询的一些数据也通过 SQL 服务器数据库中的访问链接服务器使用 views
(因此 SQL 服务器具有来自 Access 数据库的视图)。 SQL 服务器迁移唯一改变的是那些使用的视图从链接访问服务器更改为常规 SQL 服务器视图(现在在同一台服务器中) .
无论如何,这曾经是工作代码:
Set spSQL = Server.CreateObject("ADODB.Command")
Set spSQL.ActiveConnection=conSQL
strSQL = "SELECT [tblMMMemos].[EindDatum], [tblMMMemos].[Ontvanger], [tblMMMemos].[Name], [tblMMMemos].[Contact], [tblMMMemos].[Onderwerp], [vwOPSRelaties].[RelatieNaam] FROM [tblMMMemos] INNER JOIN [vwOPSRelaties] ON CONVERT (INT, Substring([tblMMMemos].[recode], 2, Len([tblMMMemos].[recode]))) = [vwOPSRelaties].[RelatieNummer] WHERE [tblMMMemos].[Status] <> ? ORDER BY (CASE WHEN [tblMMMemos].[Name] = ? THEN 1 ELSE 2 END), [tblMMMemos].[Einddatum]"
spSQL.commandtext= strSQL
spSQL.Parameters.Append spSQL.CreateParameter("@Status", adVarWChar,adParamInput,10)
spSQL.Parameters.Append spSQL.CreateParameter("@Name", adVarWChar,adParamInput,50)
spSQL.Parameters("@Status").Value = "Closed"
spSQL.Parameters("@Name").Value = "SYSTEM"
set rst=spSQL.execute(strSQL)
记录集处理如下:
Do While Not rst.EOF OR rst.BOF
'----Do something with the recordset-----
rst.movenext
loop
rst.MoveFirst
自从迁移到 SQL 服务器后,出现错误:
Line 110 Rowset position cannot be restarted.. .
在 rst.MoveFirst
所以我开始阅读并发现它可能是由于多个问题造成的。 所以我开始稍微调整一下代码,网上有一些关于同一个问题的答案。
所以首先我尝试在我的查询中设置 Nocount:
strSQL = "Set Nocount on "
strSQL = strSQL + "MyQuery"
strSQL = strSQL + " set nocount off"
这没有任何效果。其次,我尝试像这样修改我的记录集:
Set cmd = Server.CreateObject("ADODB.Command")
Set cmd.ActiveConnection = conSQL
With cmd
.Commandtext = strSQL
.CommandType = adCmdStoredProc
.Parameters.Append .CreateParameter("@Status", adVarWChar,adParamInput,10)
.Parameters.Append .CreateParameter("@Name", adVarWChar,adParamInput,50)
.Parameters("@Status").Value = "Closed"
.Parameters("@Name").Value = "SYSTEM"
End With
rst.Open cmd, conSQL, adOpenStatic, adLockBatchOptimistic
这也没有任何效果。
最后我只是尝试在没有像下面这样的存储过程的情况下做到这一点:
strSQL = "MyQuery above"
set rst=conSQL.execute(strSQL)
虽然这给了我错误:
Line 106 Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.. .
在 MoveFirst
P.S。正在通过存储过程之前的子引用打开连接,如下所示:
OpenSQL conSQL
在此子中,正在打开连接:
Sub OpenSQL(ByRef conSQL)
Set conSQL = Server.CreateObject("ADODB.Connection")
conSQL.connectionTimeout = 60
ConSQL.CommandTimeout = 0
conSQL.Open "my driver / database"
End Sub
所以现在我不知道下一步该怎么做。任何想法如何解决这一问题?
如果您只能在记录集中向前移动,那么您可能正在打开一个仅向前的记录集。游标设置会影响遍历返回的记录集的方式。 有关详细信息,请参阅以下内容:
光标位置:https://msdn.microsoft.com/en-us/library/ms675802(v=vs.85).aspx
记录集对象:https://msdn.microsoft.com/en-us/library/ms681510(v=vs.85).aspx