2017-09-14 32 views
1

我正在移植一个经典的ASP站点。对于通过ODBC特定呼叫到SQL Server 2012,我使用下面的代码:从传统的ASP和ADO调用SQL Server不会保持断开连接的记录集

objRS.CursorLocation = adUseClient 
objRS.Open strSQL, objConn, adOpenStatic, adLockBatchOptimistic 

在SQL Server Management Studio中使用SQL Server Profiler,我可以看到呼叫正在取得和运行相同的查询直接返回我的记录。

我然后继续下面的代码:

Set objRS.ActiveConnection = Nothing 
objConn.Close 
set objConn = Nothing 
Set GetRecordSet = objRS 
set objRS = Nothing 

其中GetRecordSet是函数的名称。

在调用页面中,我将我的记录集设置为GetRecordSet,我执行与if not RS.EOF then崩溃检查,并且查询不能在关闭的记录集上执行。它应该断开连接,但由于某种原因它失败了。

更新:有趣的是,传递失败的SQL是存储过程。如果我更改传入的值为select * from mytable它可以工作。在数据库方面,我用来通过ODBC连接的用户具有对存储过程的读/写和执行权限。

+0

它是原始网站的现有代码。我只是想尽可能多地移植代码,直到完全重写为止 – bilpor

+0

您的意思是“如果不是GetRecordSet.EOF”?,因为我的代码中没有看到一个名为“RS”的变量, objRS已关闭。除此之外,为什么不在使用它们后关闭记录集和连接呢?无论如何,页面完成后,它们都会被清理干净,如果需要,可以使用打开的连接发出更多查询。 –

+0

以上只是重要的片段。正如前面所说的,Windows Server 2003上的SQLServer 2005的所有工作都很好,它只能在Windows 2012上使用SQLServer 2012.我尝试使用'objRs.Open strSQL,objConn,adOpenStatic,adLockReadOnly,adCmdText'打开记录集并查看内容的objRS立即在卷土重来,它仍然在直接窗口中表示该物体已关闭。 – bilpor

回答

0

以日期为中心的错误。在SP中,我将dateformat设置为DMY。 DB语言设置为英式英语。在ODBC连接中,SQLSErver消息的语言也设置为英式英语。我没有设置的是ODBC驱动程序中的Use regional settings when outputting currency,numbers, dates and times,所以当使用结果集返回时,它将恢复为默认设置,因此不能正确映射日期时间并杀死结果集。

相关问题