调用new SqlConnection()挂起程序

时间:2011-12-06 23:10:59

标签: c# .net .net-2.0 sqlconnection

这个让我难过。我甚至没有尝试连接数据库。当这段代码到达我实例化一个新的SqlConnection对象的行时,它就会挂起,而不是抛出异常或任何东西。我试过为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

6 个答案:

答案 0 :(得分:6)

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

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

unlodctr ".NET Data Provider for SqlServer"

答案 1 :(得分:2)

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

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 :(得分:1)

建议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将来有助于防范这种情况。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

升级多个nuget软件包后,我遇到了完全相同的问题。对我来说,解决方案是:

  1. 在Visual Studio中,转到“工具”->“选项”
  2. 搜索“ Web项目”(在“项目和解决方案”下)
  3. 选中“将IIS Express的64位版本用于网站和项目

答案 5 :(得分:-2)

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

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

unlodctr ".NET Data Provider for SqlServer"

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

来源:

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

  

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