调用new SqlConnection()挂起程序

这个让我难过。 我甚至没有尝试连接数据库。 当这段代码到达我实例化一个新的SqlConnection对象的行时,它就会挂起,而不是抛出exception或任何东西。 我已经尝试过为2.0编译它。 3.5和4.0,它们都挂了。 当然它也适用于我的机器和你的机器。 但我试图在Windows Server 2008 x64服​​务器上运行此代码,它不会让步。

// example.cs using System; using System.Data; using System.Data.SqlClient; public class MainClass { public static void Main(string[] args) { Console.WriteLine("start"); SqlConnection conn = new SqlConnection(); // hangs here Console.WriteLine("finish"); // never makes it here. } } 

编译(2.0):c:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ csc.exe example.cs

它可能是一个破碎的性能计数器,这是问题。 我有这个问题,我用Procmon来检测发生了什么。 在加载性能监视器“.NET数据提供程序for SqlServer”的注册表项时,我的.NET应用程序挂起了

我使用以下命令卸载计数器以使其正常工作:

 unlodctr ".NET Data Provider for SqlServer" 

您的安装必须打破。 代码并没有真正做任何重要的事情,所以没有理由挂在那里。

SqlConnection构造函数执行此操作:

 public SqlConnection() { this.ObjectID = Interlocked.Increment(ref SqlConnection._objectTypeCount); base(); GC.SuppressFinalize(this); this._innerConnection = DbConnectionClosedNeverOpened.SingletonInstance; } 

因此,它会增加变量,将其复制到属性中,调用基础构造函数,从终结队列中删除对象,并复制引用。 就这样。

基( DbConnection )构造函数执行此操作:

 protected DbConnection() { } 

因此,这里没有任何内容实际上与实际的数据库连接有关。 所有这些都是在您实际打开连接时完成的。

您的程序也可能在第一次Console.WriteLine调用之后挂起,甚至没有创建SqlConnection对象。

建议2个步骤:

  • 重置IIS以清除任何连接池。 (也许重启Windows?)
  • 将代码更改为using语句:
  public static void Main(string[] args) { Console.WriteLine("start"); using (SqlConnection conn = new SqlConnection()) { Console.WriteLine("middle"); } Console.WriteLine("finish"); } 

该计算机上的任何其他应用程序是否可以生成任何其他SqlConnection对象?

这显然是一个环境问题,因为您发布的代码可以在任何其他机器上运行。 怀疑它已经超出了一些临界点,并且using将有助于在未来防御这一点。

我有同样的问题,它在我之后开始工作1.将目标框架从4.0更改为3.5,并且2.在Visual Studio中将调试设置更改为x64。

解决方案! 我在许多电脑上遇到了同样的问题。 框架4.5.2

在CMD中以管理员身份运行此命令:

 unlodctr ".NET Data Provider for SqlServer" 

您可能需要手动输入,因为复制意大利面不适用于引号。

资源:

http://askproblem.com/question/calling-new-sqlconnection-hangs-program/

我知道这个post已经老了,但也许别人会得到这个错误。 它可能是一个破碎的性能计数器,这是问题。 我有这个问题,我用Procmon来检测发生了什么。 我的.NET应用程序在加载性能监视器“.NET数据提供程序for SqlServer”的注册表项时挂起了我使用以下命令卸载计数器以使其正常工作:C:Windowsinf> unlodctr“.NET Data Provider for SqlServer的”