2014-05-20 7 views
0

J'ai un problème avec le code ci-dessous, Il n'y a pas d'erreur de codage MAIS parfois il jette quelques exceptions.Je voulais juste connaître un problème d'organisation du code? & comment y remédier.DB Problème de connexion seulement quelques fois

Parfois, il montre ces exceptions

1.ExecuteReader nécessite une connexion ouverte et disponible. L'état actuel de la connexion est fermé.

2.Invalide tentative d'appel de FieldCount lorsque le lecteur est fermé.

Mais parfois, il fonctionne sans problème, comme prévu

Mon codage va ici

[WebMethod, ScriptMethod] 
public static List<HomeImageSliders> GetHomeImageSliders() 
{ 
    List<HomeImageSliders> HomeImageList = new List<HomeImageSliders>(); 
    try 
    { 
     SqlCommand comHomeImage = new SqlCommand("SP_GetHomeImageSliders", conDB); 
     comHomeImage.CommandType = CommandType.StoredProcedure; 
     if (conDB.State != ConnectionState.Open) 
     { 
      conDB.Open(); 
     } 

     SqlDataReader rdr = comHomeImage.ExecuteReader(); 
     DataTable dt = new DataTable(); 

      dt.Load(rdr); 
      foreach (DataRow r in dt.Rows) 
      { 
       HomeImageList.Add(new HomeImageSliders 
       { 
        Id = (int)r["Id"], 
        ImagePath = r["ImagePath"].ToString(), 
        ModifiedDate = Convert.ToDateTime(r["ModifiedDate"]).Date 

       }); 
      } 

    } 
    catch (Exception ee) 
    { 
    } 
    finally 
    { 
     conDB.Close(); 
    } 
    return HomeImageList; 
} 

Répondre

2

Vous devez utiliser le "en utilisant" la construction:

(using ommand comHomeImage = new SqlCommand("SP_GetHomeImageSliders", conDB) { 
    (using SqlDataReader rdr = new SqlDataReader) { 
     //do some things 
    } 

} 
+0

Vous devez compter vos parenthèses. De plus, SqlDataReader 'n'a aucun constructeur défini. – LarsTech

+0

pls vérifier votre erreur paranthesis.some ici – TechGuy

2

Je ne Je sais pourquoi votre connexion est parfois fermée lorsque vous appelez

ExecuteReader() 

Mais pourquoi ne pas utiliser un bloc en utilisant à la place comme ceci:

using(SqlConnection conDB = new SqlConnection(connectionString)) 
{ 
... 
} 

cela fermer votre connexion à la DB quand il perd la portée.

1

essayer d'éviter l'utilisation de la même connexion avec deux ou plusieurs fils par usinglock

lock(_conDb) 
{ 
    //// your code here 
} 

et également envelopper votre conDb en utilisant le bloc comme ci-dessous

using(SqlConnection conDB = new SqlConnection(connectionString)) 
{ 
... 
} 
Questions connexes