调用new SqlConnection()挂起程序

Cra*_*ise 7 .net c# sqlconnection .net-2.0

这个让我难过.我甚至没有尝试连接数据库.当这段代码到达我实例化一个新的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.
    }
}
Run Code Online (Sandbox Code Playgroud)

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

小智 6

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

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

unlodctr ".NET Data Provider for SqlServer"
Run Code Online (Sandbox Code Playgroud)


p.c*_*ell 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");             
} 
Run Code Online (Sandbox Code Playgroud)

该机器上的任何其他应用程序可以创建任何其他 SqlConnection 对象吗?

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