经典ASP - Ado Recordset Open()

时间:2012-06-04 16:39:37

标签: sql-server-2008 iis-7 asp-classic

我正在尝试在我的本地计算机上设置用ASP Classic编写的遗留站点。我使用的是SQL Server 2008和IIS ver 7.5。

当我尝试打开与数据库的连接时,我遇到了错误。

我使用了this post

中的建议

使用.udl文件来创建和测试我的连接字符串,以便我知道连接字符串是有效的。我正在使用Windows身份验证,我确信运行此站点的应用程序池可以访问数据库,因为我对多个站点使用相同的池,并且它们都可以正常连接。

当打开连接时,我正在尝试运行存储过程,如果我只是写出存储的proc字符串并直接在我的数据库中运行它,它按预期工作。

以下是代码:

Const adUseClient = 3
Const adCmdStoredProc = 4
Const adOpenStatic = 3
Const adLockBatchOptimistic = 4

dim connectstring,sql
connectstring = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=my-database;Data Source=(local)\SQLEXPRESS"
sql = "MyProc '" & param1 & "','" & param2 & "'"
set rs = Server.CreateObject("ADODB.RecordSet")
rs.CursorLocation = adUseClient
rs.CursorType = adOpenStatic
rs.LockType = adLockBatchOptimistic
' this is where it is failing
rs.Open sql, connectstring, 3

其中一个问题是我得到的错误似乎是由IIS生成的,它只是说:

处理URL时服务器上发生错误。请联系系统管理员。

如果您是系统管理员,请单击此处以了解有关此错误的更多信息。

当我点击“点击此处”链接时,它会转到我关于在IIS 7上运行ASP Classic网站的常规页面,但我找不到任何与我的错误相关的内容。我似乎无法找到有关错误信息的位置。作为最后的手段,我检查了事件查看器 - > Windows应用程序日志,但没有输入我的错误。

我用谷歌搜索并尝试连接字符串上的多个排列,但无济于事。如果有人对如何解决这个问题有任何建议,或者甚至想知道在哪里寻找解决方案,我将不胜感激。非常感谢!

**编辑:**

好的我更改了IIS设置以在浏览器中显示错误,现在我收到一条更有用的错误消息,现在是:

  

Microsoft OLE DB Provider for SQL Server错误“80004005”

     

无法打开登录请求的数据库“rw-gp”。登录失败。

现在当我用Google搜索时,我发现这通常是权限问题。如您所见,我正在使用Windows身份验证,并且我在具有连接数据库权限的应用程序池下运行该站点。我在本地设置了多个在此应用程序池中运行的ASP.NET站点,并且可以使用集成安全性进行连接。我不确定出了什么问题,有人有什么建议吗?

1 个答案:

答案 0 :(得分:2)

ASP经典脚本始终使用模拟运行(这与默认情况下模拟关闭的ASP.NET不同)。

因此,由于您使用SSPI而需要访问数据库的用户需要被模拟用户。

默认情况下,模拟用户是指定为匿名用户的IUSR帐户,但是如果您已启用Windows集成安全性,则用户可能会通过运行客户端浏览器的用户帐户运行。在任何一种情况下,您都需要确保被模拟的用户可以访问数据库或停止使用SSPI。

如果您只使用匿名访问,则可以通过IIS管理器指定用于匿名访问的帐户是应用程序池标识。