2009-08-06 52 views
1

我有一个旧的.net 1.0 web应用程序,需要对其进行一些维护。我使用自动升级程序将其升级到.net 3.5(以及后来尝试2.0),但现在它无法连接到数据库。已升级.net webapp无法打开与数据库的连接

表面上看起来像一个noob连接字符串问题,但我认为它更可能与升级中的一些细微问题有关。


我得到的一般错误消息:

在建立与服务器的连接时出错。连接到SQL Server 2005时,此故障可能是由于在默认设置下,SQL Server不允许远程连接。 (provider:命名管道提供程序,error:40 - 无法打开到SQL Server的连接)


的源代码是非常基本的,没有铃铛或口哨声:

protected static SqlConnection objConn; 

objConn = new SqlConnection(strConnectionString); 

try 
{ 
    objConn.Open(); 
} 

,也尝试过作为:

using (objConn = new SqlConnection(strConnectionString)) 
{ 
    objConn.Open(); 
    ... 
} 

连接字符串来自web.config中,并使用调试器设置一个破发点,并通过连接的属性看它试图打开它之前,我可以看到,它的发现连接字符串正确:

的connectionString = “数据源= XXX.XXX.XXX.XXX;初始目录= XXXXXX;用户ID = XXXXXX,密码= XXXXXX”


我想的事情少数我已经排除了:

无论连接到Sql Server 2005还是Sql Server 2000,错误消息都是相同的。

VS错误列表中没有错误或警告。

连接字符串与其他一些也使用相同数据库的网站相同,所以我知道连接字符串是正确的。

我试过让它从我的本地计算机(我可以通过Sql查询分析器连接到数据库)连接,从普通的网络服务器,因此它不是防火墙问题,也不是最大连接问题。

它连接到服务器的IP地址,所以它不是一个电脑浏览器问题(和其他的web应用可以正常连接。

TCP和命名管道是在SQL Server上启用了2个网络协议。

在连接字符串中添加“Network Library = DBMSSOCN;”会将错误消息更改为包含“provider:TCP Provider,error”(有一天我在连接字符串中进行了更改,但也有影响,不要记得现在。)


我已经通过堆栈溢出3楼其他类似的帖子已经看到:
(无法列出这里链接,因为我是一个新用户,但他们的问题的ID,如果其他人想要在链接到它们评论是:63875,1038888,846479)
而这篇文章在其他网站上有东西一些好的想法去尝试这并没有帮助:
http://weblogs.sqlteam.com/tarad/archive/2008/05/23/60609.aspx


我最好的猜测是,它的东西引起的.net版本之间的升级 - 在web.config中可能出错了?

这是一个C#应用程序,很小/基本,但已被分成三个项目。

+0

更新到3.5时,我想确定一些事情:你在3.5sp1上还是只在基础上3.5? – 2009-08-06 04:44:55

+0

另外,您是否可以使用同一个服务器上的相同连接字符串连接到数据库? – 2009-08-06 04:45:36

+0

你说你可以通过SQL Server Management工作室(或查询分析器)进行连接,你是否也在你遇到问题的机器上测试它(从你的文本中不完全清楚)? – Gertjan 2009-08-06 06:07:47

回答

0

编写一个控制台应用程序,它除了尝试使用您发布的代码连接到数据库外什么也不做。在控制台程序中对连接字符串进行硬编码。

换句话说,删除所有的干扰,以确保您试图运行的核心代码实际上正常工作。

+0

最后的手段:-)如果/当其他所有事情都失败了,至少我还有什么可以尝试......除非这仍然失败! – Redzarf 2009-08-06 22:22:58

+0

我现在已经试过了,控制台应用程序也无法连接。时间让它成为系统管理员的问题!感谢您的建议。 – Redzarf 2009-08-07 03:18:31

0

根据this,SQL 2005未​​配置为允许传入本地或远程连接,您必须自行启用它。

+0

我不认为这是问题所在。他说,相同的字符串对其他应用程序有效(“连接字符串与其他一些也使用相同数据库的网站相同,因此我知道连接字符串是正确的。”)。但对于可能会遇到连接到SQL 2005数据库时遇到问题的其他用户而言,指出这一点很好。 – Gertjan 2009-08-06 06:04:51

+0

是的,这是别人应该检查的第一件事情之一,但那已经完成了。此外,我也无法连接到SQL 2000数据库。 – Redzarf 2009-08-06 22:19:08

0

我确定您已经完成了这些步骤,但是尝试启用SQL Server的远程连接并启用SQL Server Browser服务。两种演练都可以在here找到。

0

您可以尝试使用其他类型的连接字符串。我的连接字符串通常格式,如:

<add name="DataFrom" connectionString="SERVER=[servername];Database=[dbname];UID=[userid];PWD=[password];"/> 

你说,也正在.NET 3.5应用程序的其他aplication?



我也很好奇你如何设法让这段代码工作

using (var = new SqlConnection(strConnectionString)) 
{ 
    objConn.Open(); 
    ... 
} 

我想你的意思

using (objConn = new SqlConnection(strConnectionString)) 

吧?

+0

谢谢,我已经修复了上面的代码示例中的错误(正在整理一些信息,应该保持原样)。我会尝试更改您建议的连接字符串关键字。 – Redzarf 2009-08-06 22:21:53

1

由于从来就没有提供对这一问题的解决方案的实际,这里是一个帮助我:

我有完全相同的问题,当我升级了完美运行ASP.NET 2.0应用到.NET 3.5。 Web应用程序正在在Windows XP主办IIS 5.1,我使用SQL Server Express 2005年,我用我的web.config以下连接字符串:

<add name="myDbConnection" providerName="System.Data.SqlClient" connectionString="Data Source=http://localhost;Server=.\SQLEXPRESS;Initial Catalog=MyDatabaseName;Integrated Security=True"/> 

所以你看,我在这里没有tcp连接或连接到远程服务器。我只是通过命名管道连接本地主机上的SQLEXPRESS实例。这就是为什么我认为,与SQL Server 2005上的远程连接完全没有任何关系。但正如我发现的那样,它的确如此! (我不知道这个的真正原因!)我花了几个小时找出来,所以也许这有助于某人......

,你所要做的(请使用谷歌的细节):

  1. 允许通过SQL Server的本地和远程连接2005外围应用配置工具 (我选择的选项“同时使用TCP/IP和命名管道“)
  2. 启用SQL Server Browser服务
  3. 通过SQL Server配置管理器工具监听TCP端口设置为1433所有IP
  4. 享受你运行的Web App :-)

为什么所有这些都是必需的,以便从.NET 3.5 Web App成功连接到SQL Server时,它已经可以从.NET 2.0运行了!