我使用MS Access 2010构建了一个非常小的ASP.NET站点作为数据库,它在测试模式下工作。这是一个离线内部网应用程序,所以我不关心安全性 - 硬件访问是这里的黑客入侵的途径。这些都是在VS WebExpress 2012中构建的。
当我尝试发布到IIS 7.5时,打开网站的启动页面,然后继续第二页,我将收到两条顶级错误消息:
[Win32Exception(0x80004005):找不到网络路径]
[SqlException(0x80131904):建立与SQL Server的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确,以及SQL Server是否配置为允许远程连接。 (提供程序:命名管道提供程序,错误:40 - 无法打开与SQL Server的连接)]
我的连接字符串是:
Provider=Microsoft.ACE.OLEDB.12.0;Data Source="C:\inetpub\wwwroot\App_Data\PersonalArt Version 0055.accdb";Persist Security Info=True
我不知道为什么这会造成SQL Server错误,因为我不是在尝试使用SQL Server。
我试过调查SQL Server方面的事情here。我已经检查过SQL Server正在运行,SQL Browser已启用并正在运行,并且防火墙中已打开相应的端口。
我已经向IIS 7.5添加了一个至少指向ACE.OLEDB.12.0
的连接字符串,但我无法删除SQL Server Express的默认连接字符串。
我看了here关于连接字符串的构造,我已经看到了关于删除坏连接字符串并替换它们here的说明(但我害怕这个因为我不知道理解它。)
我打算使用WIFI平板电脑控制器,我已经确定IIS运行良好,我可以在控制器上看到索引页。
所以我一直在试图弄清楚这是一个IIS问题,一个SQL安装/管理问题,还是一个防火墙/安全问题。
答案 0 :(得分:1)
错误0x80004005:
创意#1 :尝试删除目录列表中的双引号并重新测试您的代码(即使您已经尝试过,我也提到了这一点):
"C:\inetpub\wwwroot\App_Data\PersonalArt Version 0055.accdb"
创意#2 :错误确实说未找到网络路径。尝试创建本地共享并为IIS帐户提供至少对该共享的读取权限,从而将目录列表更改为
\\MyServer\MyShare\PersonalArt Version 0055.accdb
想法:#3:作为一名DBA,我确实迎合了SQL Server,因此我个人尝试使用SQL Server测试连接字符串本身以查看它是否确实返回数据。如果它在这里不起作用,我也不希望它与ASP.NET一起工作:
尝试在SQL Server中运行此操作,以查看是否甚至在Access中查询数据表中的表名称(除非您有更好的方法来测试连接字符串):
SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
Provider=Microsoft.ACE.OLEDB.12.0;Data Source="C:\inetpub\wwwroot\App_Data\PersonalArt Version 0055.accdb";Persist Security Info=True, 'SELECT * FROM <your table>')
但在此之前,您可能需要在SQL Server中运行以下内容,以便识别ACE.OLEDB.12.0和分布式查询:
exec sp_configure 'Show Advanced Options', 1;
RECONFIGURE;
GO
exec sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE;
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1
GO
对于SqlException(0x80131904):
SQL错误听起来像是另一个问题。尝试在SQL Server配置管理器中的生产 SQL框(或生产连接的任何位置)上启用SQL以进行远程连接: