asp.net 页面有效,但经典 asp 给出拒绝访问错误
asp.net pages work, but classic asp gives access denied error
我正在新服务器上设置现有应用程序。它是 Asp.Net 和经典 Asp 页面的混合体。 asp.net 页面完美运行,但经典 asp 页面出现以下错误:
[DBNETLIB][ConnectionOpen (Connect()).]SQL Server does not exist or
access denied.
我的设置:
- Windows 服务器 2008 x64
- IIS7
- SQL 2008 Express with Advanced Services
- 32 位应用程序
以下是我尝试过的一些方法:
- 设置 IIS7 AppPool 以启用 32 位应用程序
- 在 IIS 中启用 "Active Server Pages" 扩展 "ISAPI and CGI Restrictions"
- 为 IIS7 安装了 Frontpage 2002 扩展(来自 RTR)
- 在SQL配置管理器
中启用命名管道协议
我的连接字符串:
connectionString="Data Source=(local);Initial Catalog=System;Persist Security Info=True;User ID=System;Password=mypassword" providerName="System.Data.SqlClient"
我的 CLICONFG 别名:
- 服务器别名=系统
- 网络库 = 命名管道
- 连接参数=(本地)
我以前在这个环境下成功安装过程序,没有任何问题。 *.asp
和 asp.net
都使用相同的连接字符串,所以我不明白这是怎么回事。连接字符串中指定的用户 "System" 被设置为 SQL 中的用户,并授予所有权限。
请帮忙!!我在这上面花了 3 天多的时间。
谢谢!
我不太确定经典 asp 是否理解连接字符串中的所有参数。它可能会忽略一些它不理解的东西,但我认为它遇到最大麻烦的是这个:
Data Source=(local)
并且可能
providerName="System.Data.SqlClient"
我会尝试:
创建第二个连接字符串并将一个用于经典 ASP,另一个用于 aspx。将此 'simple' 格式用于经典 asp:
Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;
更改数据源参数以使用实际的服务器或实例名称。
System.Data.SqlClient
是 asp.net 的数据提供程序,它不适用于经典 asp。
这是 SQL 服务器
的经典 ASP 连接字符串示例
Provider=sqloledb;Data Source=yourServerAddress;Initial Catalog=yourDataBase;User Id=yourUserid;Password=yourPwd;
有关更多示例,请参见此处 - 查看 oledb 提供程序。
http://www.connectionstrings.com/sql-server/
此外,您将连接字符串放在哪里?如果它在 web.config 中,那么 .net 将能够读取它,但 Classic ASP 则不能。它需要进入想要连接自身的页面,包含或 global.asa
编辑 - 加一分。如果您使用的是 SQL Server Express,那么您需要指定此项 - 例如:
Data Source=localhost\SQLEXPRESS
Shawnda、John 和 Evan 提出了很好的建议和观点。
我将与您分享我的活动实时服务器配置,以便您可以在您的服务器上进行测试。如果您在 IIS 7.x 和 Windows 2008 Server 上 运行ning MSSQL 具有任何 SQL Server 2008 风格。
我 运行 2 台服务器混合了 .Net 和 ASP 一个 Web 2008 和 2008 R2 with IIS .Net 站点 ASP 使用公共数据库所有站点混合工作得很好。
第一个提示,使您的连接字符串成为 Call Function 或 Sub。
根据您所说的,您必须找到您拥有连接字符串的所有位置。
我们的迁移方式将为您提供帮助。
创建您的函数并将其放入您的 SQL 包含页面或包含在所有需要您的连接字符串的页面中的主脚本页面。
Function ConnOpen(SqlConn)
Dim strConnSql
Set SqlConn = Server.CreateObject("ADODB.Connection")
strConnSql = "Provider=SQLNCLI10;Server=SERVERNAME\SQLEXPRESS;Database=DBNAME;UID=USER;PWD=PASSWORD;"
SqlConn.Open strConnSql
End Function
Function ConnClose(SqlConn)
SqlConn.Close
Set SqlConn = Nothing
End Function
按照建议更改字符串。
这就是我从数据库迁移站点的方式。
我将添加一个新的连接字符串作为函数并在我的一个页面上对其进行测试。
如果新连接有效,我将搜索并替换该字符串。
一旦你弄清楚哪个连接字符串有效,你就不会再花 3 天的时间了。
上面的字符串在我的 inc_sqlpage.asp 中的 .Net 站点上有效,它包含在所有需要数据库连接的页面中。
您应该找到所有连接字符串并删除它们并用更易于管理的函数替换它们。
Call ConnOpen(MyConn)
... 'your SQL
Call ConnClose(MyConn)
如果使用此方法后您仍然无法连接,那么我会说这是您的服务器命名或防火墙(如果这是新服务器)。
示例:我不使用 IP 地址连接,只使用内部 DNS 机器名称。如果我将服务器名更改为 IP,我会看到相同类型的错误。
我确定您已经尝试过不同的设置,但尝试使用上面的切换 IP 与机器名称、.\ 和 localhost 但不是(本地)。
我找到了解决方案!!!
感谢大家的帮助。我终于找到了解决方案!
原来我的经典 asp 页面的连接字符串期望 SQL 与默认实例一起安装....但我已经完成了一个命名实例。连接字符串有 "Data Source = System"(系统是计算机上的别名设置,仅指定(本地)作为连接....它没有指定实例名称。)。
我将连接字符串更改为 "Data Source = .\SQLEXPRESS",它工作正常。
如果我在安装期间选择了 "Default Instance",那么其中的连接字符串会工作正常....就像在我安装的其他服务器上所做的那样。
再次感谢!
我正在新服务器上设置现有应用程序。它是 Asp.Net 和经典 Asp 页面的混合体。 asp.net 页面完美运行,但经典 asp 页面出现以下错误:
[DBNETLIB][ConnectionOpen (Connect()).]SQL Server does not exist or access denied.
我的设置:
- Windows 服务器 2008 x64
- IIS7
- SQL 2008 Express with Advanced Services
- 32 位应用程序
以下是我尝试过的一些方法:
- 设置 IIS7 AppPool 以启用 32 位应用程序
- 在 IIS 中启用 "Active Server Pages" 扩展 "ISAPI and CGI Restrictions"
- 为 IIS7 安装了 Frontpage 2002 扩展(来自 RTR)
- 在SQL配置管理器 中启用命名管道协议
我的连接字符串:
connectionString="Data Source=(local);Initial Catalog=System;Persist Security Info=True;User ID=System;Password=mypassword" providerName="System.Data.SqlClient"
我的 CLICONFG 别名:
- 服务器别名=系统
- 网络库 = 命名管道
- 连接参数=(本地)
我以前在这个环境下成功安装过程序,没有任何问题。 *.asp
和 asp.net
都使用相同的连接字符串,所以我不明白这是怎么回事。连接字符串中指定的用户 "System" 被设置为 SQL 中的用户,并授予所有权限。
请帮忙!!我在这上面花了 3 天多的时间。
谢谢!
我不太确定经典 asp 是否理解连接字符串中的所有参数。它可能会忽略一些它不理解的东西,但我认为它遇到最大麻烦的是这个:
Data Source=(local)
并且可能
providerName="System.Data.SqlClient"
我会尝试:
创建第二个连接字符串并将一个用于经典 ASP,另一个用于 aspx。将此 'simple' 格式用于经典 asp:
Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;
更改数据源参数以使用实际的服务器或实例名称。
System.Data.SqlClient
是 asp.net 的数据提供程序,它不适用于经典 asp。
这是 SQL 服务器
的经典 ASP 连接字符串示例Provider=sqloledb;Data Source=yourServerAddress;Initial Catalog=yourDataBase;User Id=yourUserid;Password=yourPwd;
有关更多示例,请参见此处 - 查看 oledb 提供程序。
http://www.connectionstrings.com/sql-server/
此外,您将连接字符串放在哪里?如果它在 web.config 中,那么 .net 将能够读取它,但 Classic ASP 则不能。它需要进入想要连接自身的页面,包含或 global.asa
编辑 - 加一分。如果您使用的是 SQL Server Express,那么您需要指定此项 - 例如:
Data Source=localhost\SQLEXPRESS
Shawnda、John 和 Evan 提出了很好的建议和观点。
我将与您分享我的活动实时服务器配置,以便您可以在您的服务器上进行测试。如果您在 IIS 7.x 和 Windows 2008 Server 上 运行ning MSSQL 具有任何 SQL Server 2008 风格。
我 运行 2 台服务器混合了 .Net 和 ASP 一个 Web 2008 和 2008 R2 with IIS .Net 站点 ASP 使用公共数据库所有站点混合工作得很好。
第一个提示,使您的连接字符串成为 Call Function 或 Sub。 根据您所说的,您必须找到您拥有连接字符串的所有位置。
我们的迁移方式将为您提供帮助。 创建您的函数并将其放入您的 SQL 包含页面或包含在所有需要您的连接字符串的页面中的主脚本页面。
Function ConnOpen(SqlConn)
Dim strConnSql
Set SqlConn = Server.CreateObject("ADODB.Connection")
strConnSql = "Provider=SQLNCLI10;Server=SERVERNAME\SQLEXPRESS;Database=DBNAME;UID=USER;PWD=PASSWORD;"
SqlConn.Open strConnSql
End Function
Function ConnClose(SqlConn)
SqlConn.Close
Set SqlConn = Nothing
End Function
按照建议更改字符串。 这就是我从数据库迁移站点的方式。 我将添加一个新的连接字符串作为函数并在我的一个页面上对其进行测试。 如果新连接有效,我将搜索并替换该字符串。 一旦你弄清楚哪个连接字符串有效,你就不会再花 3 天的时间了。
上面的字符串在我的 inc_sqlpage.asp 中的 .Net 站点上有效,它包含在所有需要数据库连接的页面中。
您应该找到所有连接字符串并删除它们并用更易于管理的函数替换它们。
Call ConnOpen(MyConn)
... 'your SQL
Call ConnClose(MyConn)
如果使用此方法后您仍然无法连接,那么我会说这是您的服务器命名或防火墙(如果这是新服务器)。
示例:我不使用 IP 地址连接,只使用内部 DNS 机器名称。如果我将服务器名更改为 IP,我会看到相同类型的错误。 我确定您已经尝试过不同的设置,但尝试使用上面的切换 IP 与机器名称、.\ 和 localhost 但不是(本地)。
我找到了解决方案!!!
感谢大家的帮助。我终于找到了解决方案!
原来我的经典 asp 页面的连接字符串期望 SQL 与默认实例一起安装....但我已经完成了一个命名实例。连接字符串有 "Data Source = System"(系统是计算机上的别名设置,仅指定(本地)作为连接....它没有指定实例名称。)。
我将连接字符串更改为 "Data Source = .\SQLEXPRESS",它工作正常。
如果我在安装期间选择了 "Default Instance",那么其中的连接字符串会工作正常....就像在我安装的其他服务器上所做的那样。
再次感谢!