Web应用程序到SQL Server不连接(错误定位服务器/实例指定)

时间:2013-04-26 14:25:13

标签: c# .net sql sql-server connection-string

我知道这是一个经常被问到的问题,但我仍然收到此错误,我尝试过:

  • 使用localhost,IP地址和实例名称 连接字符串
  • 更改SQL Server配置管理器 命名管道和TCP都已启用确保数据库设置为 允许远程连接
  • 开设1433&用于UDP和1434的1434 Windows防火墙中的TCP,实际上是我 尝试关闭防火墙片刻,看它是否会 连接
  • 确保浏览器& MSSQLSERVER服务都是up和 使用NETWORK SERVICE运行

现在有些奇怪。 SQL Server实例和运行该网站的IIS位于同一台计算机上。

如果我打开浏览器并浏览网站,我会收到错误消息。如果我在本地计算机上打开浏览器并浏览到该网站,则会收到错误消息。如果我将开发PC中的连接字符串更改为运行SQL Server的远程服务器的IP地址并调试它连接的应用程序并运行而没有错误!

我现在完全不知道可能是什么错误。

这是SQL Server 2008 RC2。

我即将放弃 - 我非常感谢你们所做的努力,我已经在这里尝试了所有的建议,我得出的结论是,在集合中出现了一些错误服务器,网站或数据库的特写。只是重申您是否将远程桌面连接到服务器并使用http://gdservers连接到网站,您可以登录并且一切正常,如果您使用http://gdservers.<domain>.co.uk登录失败。事件日志中的错误是成员身份凭据失败,未被防火墙或类似的东西阻止。如果有任何其他建议我很乐意听到,再次感谢。

7 个答案:

答案 0 :(得分:1)

我认为没有人发现它,我只在星期三发现它,然后意识到我又犯了一个错误。如果有人在上面提到过,请告诉我,我会更改奖励并给予积分。

成员资格提供程序中缺少applicationName。我在星期三发现了它,并添加了一个,我没有意识到我做的是在添加applicationName时拼写错误,所以当我这样做时,它没有解决它,所以我认为它不是'这个问题。

昨天在查看代码时我注意到我在更改它时拼写了applicationName'GSServers'而不是'GDServers',这一切都开始有效了。

不是一个非常令人满意的结论,我道歉。

感谢所有试图解决这个问题并坚持下去的人。

正如我所说的,如果有人在某个地方的答案或评论中提到这个,请告诉我,他们可以获得积分。

答案 1 :(得分:0)

如果您的网络应用程序打算使用带有SQL登录名/密码的SQL Server身份验证,请确保您的连接字符串明确指出Integrated Security=False。否则,您的连接可能默认为Windows身份验证,并且行为不符合预期。

修改

此外,请确保您正在调整的连接字符串是实际用于建立连接的连接字符串。有时,当应用程序具有可能具有自己的配置设置的多个组件时,事情会变得混乱。例如,线程here中的问题原来是:

  

我正在更新web.config上的连接字符串,但它是一个多层应用程序,数据访问组件位于单独的.dll中,并且有自己的连接字符串。

修改

我开始怀疑SQL成员资格提供程序是否使用Windows身份验证连接到SQL Server,即使您的数据连接不是。查看视频here,然后查看您的设置(尤其是提供商设置步骤中的身份验证设置)。

答案 2 :(得分:0)

注释:从安全角度来看,最好使用SSPI和Windows用户帐户。

答案:

端口1433由默认(未命名)实例用于SSL。 确保命名实例已正确分配SSL端口:
http://blogs.msdn.com/b/sqlexpress/archive/2005/05/05/415084.aspx

尝试使用这些连接字符串(注意它们不使用'localhost' - 我认为这是区分大小写的):

  • 'Provider = SQLOLEDB;数据源= COMPUTERNAME \ SQLEXPRESS;初始目录=测试;用户ID = COMPUTERNAME \ USERNAME;密码=密码;集成安全性=假'

  • 'Provider = SQLOLEDB; Data Source =。\ SQLEXPRESS; Initial Catalog = Test; User ID = COMPUTERNAME \ USERNAME;密码=密码;集成安全性=假'

  • 'Provider = SQLOLEDB; Data Source =。\ SQLEXPRESS; Initial Catalog = Test; User ID = COMPUTERNAME \ USERNAME;密码=密码;集成安全性= SSPI'

其他编辑:

每当客户端在与SQL Server相同的计算机上运行时,就会发生错误。从dev机器运行客户端时,没有错误。您可能无法解析计算机名称,因为DNS不支持任何名称。

建议:使用localhost进行连接。确保您可以ping localhost和/或telnet localhost 1433。确保您的主机文件(例如C:\ Windows \ System32 \ drivers \ etc \ hosts)具有条目:

  127.0.0.1       localhost

或者,使用:( local)\ INSTANCENAME

运行SQLCMD -L列出安装(确认浏览器操作正确)。

确保您没有在同一台服务器上确保使用旧版本的管理工具。例如。 2008年&amp; 2005工具无法共存 - 但2008工具向后兼容,因此您可以删除这两个工具并干净地安装2008。

答案 3 :(得分:0)

愚蠢的问题,但是,你检查了登录的凭据吗?我仍然是这个领域的菜鸟,但我发现通过备份和恢复数据库(至少在MS SQL Server中)恢复的用户登录不起作用。

我必须从数据库中删除用户并将其重新添加,然后一切正常。难道你是在非工作机器上访问不同版本的数据库吗?

答案 4 :(得分:0)

您如何在连接字符串中指明数据源/服务器名称?我遇到过这样的情况,即服务器上的主机文件重定向到其他地方,或者服务器由解析为服务器外部IP地址的域名指示,或其他类似的奇怪现象。

此外,如果您在服务器上安装了SQL Serve,那么您是否还安装了Management Studio?这是排除代码或权限错误的最快方法,只需通过Management Studio尝试各种变体,直到找到有效的登录详细信息(或者知道没有任何操作)。

答案 5 :(得分:0)

通常最简单,最安全的方法是使用集成安全性:

<connectionStrings>
    <add name="HitCounterContext"
         connectionString="Data Source=(local)\SQLEXPRESS;Initial Catalog=db;Integrated Security=True"
         providerName="System.Data.SqlClient" />
</connectionStrings>

确保使用正确的实例名称,默认情况下为“SQLExpress”。我不知道IDE如何使用它,但使用此连接字符串与IIS至少应成功连接(这不等于身份验证)。

可能验证失败,因为您的数据库必须拥有应用程序池帐户的用户。如果您在web.config中禁用自定义错误,以便获得.net错误消息,则错误消息应告诉您应用程序池用户的身份验证失败(该消息实际上告诉您使用了哪个用户)。例如:如果您使用IIS 7创建名为“yoursite.com”的新网站,则默认情况下会创建一个名为“yoursite.com”的新应用程序池。有了这个,您必须将用户添加到IIS APPPOOL/yoursite.com的数据库中(可能不在用户列表中),并让它成为db_owner进行测试。

使用“SQL Server Management Studio”添加应用程序池的用户(抱歉,它是德语。这实际上是用户添加后的表单,但添加时应该看起来相同):

Add the app pool user

之后,您的用户列表应该是

Database users list

和服务器登录列表如

Servers login list

其中每个应用程序池都有自己的服务器登录名和相应数据库的用户。

顺便说一句:从管理工作室连接的工作方式与您的asp.net应用程序相同,只是您通常使用当前用户使用短信:

enter image description here

因此,如果这样做,您的应用程序的连接也应该这样做。其余的依赖于应用程序池的用户。

答案 6 :(得分:0)

它尝试以本地方式登录这一事实表明您没有在代码中使用连接字符串;我认为这不是SQL服务器问题,而是应用程序问题。

在您的应用中,确保您实际使用的是连接字符串的值。不要使用默认构造函数。例如。

using(SqlConnection conn = new SqlConnection(WebConfigurationManager.ConnectionStrings["myconnectionstring"].ConnectionString)){ /* .. code */ }

不是

using(SqlConnection conn = new SqlConnection()){ /* .. code .. */ }
  

如果我将开发PC中的连接字符串更改为运行SQL Server的远程服务器的IP地址并调试它连接的应用程序并运行且没有错误!

您可能已经在开发框中添加了经过身份验证的登录信息,并且它可以自动“正常工作”。