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

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


我收到一般错误消息:

建立与服务器的连接时发生错误。当连接到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="数据源=XXX.XXX.XXX.XXX;初始目录=XXXXXX;用户ID=XXXXXX;密码=XXXXXX"


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

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

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

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

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

它连接到服务器的 IP 地址,因此不是计算机浏览器问题(其他网络应用程序可以正常连接。

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# 应用程序,非常小/基本,但已分为三个项目。

有帮助吗?

解决方案

写一个控制台应用程序,什么也不做,但试图利用您发布的代码连接到数据库。硬编码的连接字符串中的控制台程序。

在换句话说,除去所有的杂念,以确保您要实际运行的核心代码工作正常。

其他提示

由于从未针对此问题提供实际的解决方案,因此以下是对我有帮助的解决方案:

当我将完美运行的 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 浏览器服务
  3. 通过 SQL Server 配置管理器工具将所有 IP 的侦听 TCP 端口设置为 1433
  4. 享受您正在运行的网络应用程序:-)

当 .NET 3.5 Web 应用程序已经可以从 .NET 2.0 运行时,为什么需要执行所有这些操作才能成功地从 .NET 3.5 Web 应用程序连接到 SQL Server?

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

我敢肯定,你已经通过这些步骤已经走了,但...尝试启用的SQL Server远程连接并启用SQL Server Browser服务。一种用于两个演练可以发现此处

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

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

您说的其他aplication这也是.NET 3.5的工作申请?

搜索结果

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

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

我想你的意思

using (objConn = new SqlConnection(strConnectionString)) 

正确?

scroll top