chiamando il nuovo programma SqlConnection () si blocca

Questo mi ha perplesso. Non sto nemmeno cercando di connettermi a un database. Quando questo codice raggiunge la linea in cui istanziato un nuovo object SqlConnection, si blocca lì, senza generare un’eccezione o altro. Ho provato a compilarlo per 2.0. 3.5 e 4.0 e tutti si bloccano. Naturalmente funziona anche sul mio computer e sul tuo. Ma sto cercando di eseguire questo codice su un server Windows Server 2008 x64 e non si sposterà.

// 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. } } 

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

È probabilmente un contatore di prestazioni rotto che è il problema. Ho avuto questo problema e ho usato Procmon per rilevare cosa è successo. La mia applicazione .NET si è impigliata quando si trattava di caricare le chiavi di registro per il monitor delle prestazioni “.NET Data Provider for SqlServer”

Ho scaricato il contatore con il seguente comando per farlo funzionare:

 unlodctr ".NET Data Provider for SqlServer" 

La tua installazione deve essere rotta. Il codice in realtà non fa nulla di vitale, quindi non c’è motivo di rimanere lì.

Il costruttore SqlConnection fa questo:

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

Quindi, aumenta una variabile, la copia in una proprietà, chiama il costruttore base, rimuove l’object dalla coda del finalizzatore e copia un riferimento. È tutto.

Il costruttore base ( DbConnection ) esegue questo:

 protected DbConnection() { } 

Quindi, non c’è nulla in qui che in realtà faccia qualcosa legato a una vera connessione al database. Tutto ciò che viene fatto quando si apre effettivamente una connessione.

Il tuo programma potrebbe anche essere appeso dopo la prima chiamata a Console.WriteLine e nemmeno arrivare fino alla creazione dell’object SqlConnection .

Suggerisci 2 passaggi:

  • ripristinare IIS per cancellare qualsiasi pool di connessioni. (Forse riavviare Windows?)
  • cambia il codice per avere un’istruzione using :
  public static void Main(string[] args) { Console.WriteLine("start"); using (SqlConnection conn = new SqlConnection()) { Console.WriteLine("middle"); } Console.WriteLine("finish"); } 

È ansible che qualsiasi altra app da quella macchina crei altri oggetti SqlConnection?

È ovviamente un problema ambientale , dato che il codice postato funzionerà su qualsiasi altra macchina. Sospetto che sia andato oltre un punto critico, e l’ using aiuterà a difendersi da questo in futuro.

Ho avuto lo stesso problema e ha iniziato a funzionare dopo I 1. Modificato il framework di destinazione da 4.0 a 3.5 e 2. cambiato le impostazioni di debug su x64 in Visual Studio.

Soluzione trovata! Ho avuto lo stesso problema su molti PC. Framework 4.5.2

Esegui questo comando come amministratore in CMD:

 unlodctr ".NET Data Provider for SqlServer" 

Potrebbe essere necessario scriverlo a mano poiché la pasta non funziona bene con le virgolette.

Fonte:

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

So che questo thread è vecchio, ma forse qualcun altro avrà questo errore. È probabilmente un contatore di prestazioni rotto che è il problema. Ho avuto questo problema e ho usato Procmon per rilevare cosa è successo. La mia applicazione .NET si è impiccata quando è arrivata a caricare le chiavi di registro per il monitor delle prestazioni “.NET Data Provider per SqlServer” Ho scaricato il contatore con il seguente comando per farlo funzionare: C: Windowsinf> unlodctr “. NET Data Provider for Server SQL”