升级.net web app无法打开与数据库的连接

时间:2009-08-06 04:13:34

标签: .net sql-server .net-3.5 upgrade .net-1.0

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

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


我收到一般错误消息:

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


源代码非常基本,没有花里胡哨的东西:

protected static SqlConnection objConn;

objConn = new SqlConnection(strConnectionString);

try
{
    objConn.Open();
}

并尝试过:

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

连接字符串来自web.config,并使用调试器设置断点并在尝试打开它之前查看连接的属性,我可以看到它正确找到了连接字符串:

connectionString =“Data Source = XXX.XXX.XXX.XXX; Initial Catalog = XXXXXX; User ID = XXXXXX; Password = XXXXXX”

我认为我已经排除了一些事情:

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

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

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

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

它连接到服务器的IP地址,因此它不是计算机浏览器问题(和其他webapps可以正常连接。

TCP和命名管道是sql server上启用的2个网络协议。

添加“网络库= DBMSSOCN;”连接字符串更改错误消息以包括“提供者:TCP提供程序,错误”(有一些其他我在连接字符串中更改了另一天也有这种影响,但我现在不记得了。)

我已经查看了堆栈溢出中的其他3个类似帖子:
(不能在此列出链接,因为我是新用户,但如果其他人想在评论中链接到他们,则他们的问题ID是:63875,1038888,846479)
而另一个网站上的这篇文章对于要尝试的事情有一些好的想法也没有帮助:
http://weblogs.sqlteam.com/tarad/archive/2008/05/23/60609.aspx


我最好的猜测是.net版本之间升级引起的问题 - 在web.config中可能有问题吗?

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

5 个答案:

答案 0 :(得分: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配置管理器工具
  4. 为所有IP设置侦听TCP端口为1433
  5. 享受正在运行的网络应用: - )
  6. 为什么所有这一切都是必要的,以便从.NET 3.5 Web应用程序成功连接到SQL Server,因为它已经从.NET 2.0开始工作了!

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

您说的其他应用程序是否也在使用.NET 3.5应用程序?



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

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

我认为你的意思是

using (objConn = new SqlConnection(strConnectionString)) 

正确?

答案 4 :(得分:0)

编写一个控制台应用程序,它只会尝试使用您发布的代码连接到数据库。在控制台程序中对连接字符串进行硬编码。

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