2010-04-12 3 views
0

Pouvez-vous utiliser 2 « utilisant » déclarations comme:Pouvez-vous utiliser 2 instructions 'using' pour sqlconnection et sqldatareader?

using (SqlConnection ..) 
{ 
    using(SqlDataReader reader = new SqlDataReader()) 
    { 

    } 

} 

Je suis en train de faire une erreur se mettre sur le constructeur de la SqlDataReader

+0

Quelle est l'erreur? Cela devrait fonctionner correctement. –

+1

ne pense pas que SqlDataReader a un constructeur ... donc vous ne pouvez pas utiliser de nouveau dessus – deostroll

+0

ouais ce constructeur était le problème, merci! – Blankman

Répondre

6

SqlDataReader n'a pas de constructeur. Vous êtes renvoyé un lecteur de données en appelant la méthode ExecuteReader d'un objet SqlCommand.

par exemple.

using (SqlConnection ..) 
{ 
    SqlCommand cmd = new SqlCommand(...); 
    using(SqlDataReader reader = cmd.ExecuteReader())) 
    { 

    } 

} 
+0

FYI: SqlCommand est IDisposable et doit également figurer dans une instruction using. – dkackman

1

Vous pouvez et vous pouvez également les mettre en forme sans parenthèses supplémentaires comme suit:

using (SqlConnection ..) 
using(SqlDataReader reader = new SqlDataReader()) 
{ 

} 

Ce que je fais tout le temps pour limiter l'imbrication de la portée.

+0

wow, je ne savais pas à propos de l'évitable {}. pratique. . . –

+0

Ceci est toujours faux, et jettera toujours la même erreur. – cjk

+0

Quelle que soit votre erreur, il n'est pas possible d'utiliser deux instructions using. – dkackman

0

Vous ne pouvez pas instancier un SqlDataReader comme indiqué ci-dessus. Généralement, je vois 2 niveaux d'utilisation des blocs, mais l'intérieur serait l'objet de commande, quelque chose comme ceci:

using (var conn = new SqlConnection(...)) 
{ 
    conn.Open(); 
    using (var cmd = new SqlCommand(...)) 
    { 
     var rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection); 
    } 
} 
Questions connexes