IIS 7无法连接到SQLServer 2008。

3
抱歉,如果这是网络上最常见的问题,请见谅,但现在轮到我了。我正在尝试将我的asp.net mvc应用程序发布到安装有MS Sql Server 2008的IIS 7上。我使用的是Windows Server 2008虚拟机。我遇到了以下经典错误:
“建立到SQL Server的连接时发生与网络相关或特定于实例的错误。找不到服务器或无法访问。请验证实例名称是否正确,并确认SQL Server已配置为允许远程连接。(提供程序:SQL Network Interfaces,错误:26 - 找不到指定的服务器/实例)”
在SQLServer下,已选中“允许远程连接”。我的连接字符串如下:
“Data Source=.\MSSQLSERVER;Initial Catalog=mydbname;User Id=sa;Password=mypassword”
我还尝试过不带用户名/密码和“Integrated Security=true”。只安装了一个SQLServer实例。我尝试在本地和远程访问我的网页。虚拟机上没有活动防火墙。
6个回答

3

请确保您在SQL Server配置工具中设置了TCP/IP作为传输协议。


在 MSSQLSERVER 的传输中,我可以看到启用了 TCP/IP。 - Nicolas Cadilhac

3
感谢大家的尝试。我找到了解决办法,与我忘记提供的信息有关。希望这能帮助像我一样新手的人。
我使用 NHibernate,连接字符串实际上在 nhibernate.cfg.xml 文件中。web.config 文件中的连接字符串实际上由我的各种提供程序(用户/角色)使用。我通过从 NH 配置文件中删除连接字符串来解决这个问题。现在我使用以下方式检索它:
string connectionString = ConfigurationManager.
ConnectionStrings["myConnectString"].ConnectionString;

我使用以下代码在NH中设置它:

Configuration cfg = new Configuration();
cfg.Configure(cfgFile);
cfg.SetProperty(NHibernate.Cfg.Environment.ConnectionString, connectionString);

现在我得到的是:

无法打开由登录请求的数据库“mydb”。 登录失败。用户“NT AUTHORITY\NETWORK SERVICE”的登录失败。

但这是另一个故事,如果我找不到答案,那就是另一个问题。

PS:我不得不使用“。”作为服务器名称,否则.\MSSQLSERVER会产生一个新错误“无效的连接字符串”。感谢Ian和Jared的提示。


很高兴听到你解决了它。 - Ian Devlin
关于“登录失败” - 您是否正在运行非英语操作系统?由于某些原因,“NT Authority\Network Service”的帐户名称已被本地化为其他语言。 不幸的是,许多程序将帐户名称硬编码为英文名称,并且在运行外语版本的Windows时无法找到Network Service。 - Sam
谢谢Sam,但不是那个问题。只是权限的问题。 - Nicolas Cadilhac

1

那是来自 Web.config 的实际数据源行吗?

如果是的话,当然应该加引号以确保安全,并在末尾添加 ;,并检查这是否为您的实例的实际名称,您可以在 Windows 服务中检查实例名称。

尝试用 localhost 替换 .,并且您能否使用连接字符串中的凭据从 SQL Server Management Studio 连接?


是的,这是来自我的 Web 配置文件的那一行。它带有引号,实际上末尾已经有了 ";"。我在管理工具中使用这些凭据成功地进行操作。替换为本地主机也不起作用。是的,MSSQLSERVER 是实例名称(在服务下检查过)。 - Nicolas Cadilhac
基本上我们都认为这应该很简单,而且应该能够工作:)。抱歉,这些简单的东西没有帮助。 - Robert

1

你确定它是 SQL 的命名实例吗?

尝试一下:

Data Source=.;Initial Catalog=mydbname;User Id=sa;Password=mypassword

更新:

来自 此网站

你尝试过以下操作吗:

  • 确保服务器可达,例如 DNS 能够正确解析,您能够 ping 服务器(并非总是如此)。
  • 确保 SQL Browser 服务在服务器上运行。
  • 如果服务器启用了防火墙,则需要将 sqlbrowser.exe 和/或 UDP 端口 1434 放入例外。

谢谢Jared,我也按照你提到的清单进行了操作。但是没有成功。 - Nicolas Cadilhac

1

正如Robert所提到的,尝试一下:

ConnectionString="Data Source=(LOCAL)\MSSQLSERVER;Initial Catalog=mydbname;User ID=sa;Password=mypassword"

我不确定连接字符串是否区分大小写,但我注意到你使用了'Id'而非'ID'。

编辑: 不确定是否需要\MSSQLSERVER?


0

早上开始(过去8个小时)我一直面临着与上述问题相同的问题,做了很多事情,比如创建域名、设置新的应用程序池标识,但都没有起作用 :(

我只是在web.config文件中对连接字符串进行了小的更改,即:Integrated Security=False而不是True...现在它完美地工作了。


基本上,Integrated Security = True 意味着使用当前的 Windows 帐户凭据进行身份验证。因此,在连接使用 SQL Server 身份验证而不是 Windows 时,请将其设置为 False。 - Aarti Srivastava

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接