【发布时间】:2009-08-06 04:13:34
【问题描述】:
我有一个旧的 .net 1.0 webapp,需要对其进行一些维护。我已经使用自动升级器将其升级到 .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 Query Analyzer 连接到数据库)和普通网络服务器连接,所以这不是防火墙问题,也不是最大连接数问题。
它正在连接到服务器的 IP 地址,因此不是计算机浏览器问题(其他 web 应用程序可以正常连接。
TCP 和命名管道是 sql server 上启用的两种网络协议。
添加“网络库=DBMSSOCN;”到连接字符串更改错误消息以包含“提供者:TCP Provider,错误”(前几天我在连接字符串中更改的其他内容也有影响,但我现在不记得了。)
我已经浏览过其他 3 篇关于堆栈溢出的类似帖子:
(无法在此处列出链接,因为我是新用户,但如果其他人想在评论中链接到他们,他们的问题 ID 是:63875、1038888、846479)
另一个网站上的这篇文章有一些很好的想法可以尝试,但也没有帮助:
http://weblogs.sqlteam.com/tarad/archive/2008/05/23/60609.aspx
我最好的猜测是,它是由 .net 版本之间的升级引起的 - 可能是 web.config 中的问题?
这是一个 C# 应用程序,非常小/基本,但已分为三个项目。
【问题讨论】:
-
更新到 3.5 时,我想确认一下:您使用的是 3.5sp1 还是基础 3.5?
-
另外,您是否能够使用来自同一服务器的相同连接字符串连接到数据库?
-
您说您可以通过 SQL Server Management Studio(或查询分析器)进行连接,您是否也在遇到问题的机器上对其进行了测试(从您的文字中不完全清楚)?
-
啊哈!看起来我没有 3.5sp1,这只是我希望被提醒的类型。 “使用来自同一服务器的相同连接字符串连接到数据库?” -- 是的,我将这个 web 应用与(同一服务器)另一个成功连接到同一数据库的 web 应用一起上传。
-
安装 SP1 需要 2 小时,但没有区别。
标签: .net sql-server .net-3.5 upgrade .net-1.0