Sp_OADestory未清除/销毁创建的对象

时间:2013-06-30 11:46:22

标签: sql web-services

我正在使用sp_oacreate来调用webservice。 webservice只输出从数据库查询的字符串。 这是序列:

  • sp_oacreate - >创建MSXML2.XMLHTTP的实例
  • sp_oamethod - >打开连接
  • sp_oamethid - >发送
  • sp_oamethod - >得到responseText
  • sp_oadestory - >释放创建对象的内存

我尝试更改数据库中的数据以检查在Webservice调用期间是否反映了更改,但是输出在第一次运行时始终是相同的。似乎sp_oadestroy实际上无法释放内存或似乎正在使用缓存。记忆问题?

详细说明,这是一个示例运行和/我们的输出:

  • 更新数据库:1,2,3,4
  • 首先输出输出:1,2,3,4
  • 更新数据库:1,2,3,4,5
  • 第二次运行输出:1,2,3,4
  • ....同样的输出

我知道CLR最适合这个,但CLR在SQL2000中不可用,因此它不是替代方案。让我们说我真的必须在SQL2000中这样做。 修补程序或修补程序?比方说,管理员不会允许或冒险(没有进一步的问题:D)

请详细说明这个问题。非常感谢!

以下是代码的一部分:

SET @url = 'http://url_showtext.php?val1=1&val2=2'
EXEC sp_OACreate 'MSXML2.XMLHTTP', @object OUT
EXEC sp_OAMethod @object, 'open', NULL,'get', @url, 'false'
EXEC sp_OAMethod @object, 'send'
EXEC sp_OAMethod @object, 'responseText', @ResponseText OUTPUT
EXEC sp_OADestroy @object
select @ResponseText 

顺便说一句,请不要问或嘲笑为什么我使用sp_oacreate并通过sql调用这个web服务的事情。我见过很多这样的事情,他们并没有帮助达到目的,真的。谢谢!

2 个答案:

答案 0 :(得分:2)

如果其他人偶然发现这个问题,我将不得不回答我自己的问题:

只需在网页的上半部分添加“no-cache”语句即可。 在我的例子中,sp_oamethod只是称为一个简单的asp经典页面。

所以,只需添加asp页面:

Response.Expires = 0
Response.Expiresabsolute = Now() - 1
Response.AddHeader "pragma","no-cache"
Response.AddHeader "cache-control","private"
Response.CacheControl = "no-cache" 

答案 1 :(得分:1)

您无需对任何内容进行任何更改。检索到的页面实际上是由Internet Explorer缓存的

所以你只需要在Internet Explorer / Internet选项/临时Internet文件和历史记录设置/检查存储页面的更新版本中设置“我每次访问网页”选项