2015-12-13 1 views
0

J'affecte l'objet sqlliteconnection à une variable statique et l'initialise dans une fonction. En accédant à l'objet sqlliteconnection dans certains cas, il renvoie l'exception "sqlconnection object is dispos". À ma connaissance, les variables statiques ne sont éliminées que lorsque l'application se ferme.Pourquoi sqlliteconnection assignée à des variables statiques est-elle éliminée?

Exemple de code:

public static SQLLiteConnection sql; 

public void OpenConnection() 
{ 
    sql = new SQLLiteConnection ; 
    //assign sql lite file path 
    sql.Open(); 
} 

public void GetStud() 
{ 
    OpenConnection(); 
//writing sqlcommand connection 
} 
} 

Répondre

0

Vous pouvez appeler Dispose() même objet statique. Son but est de libérer des ressources non gérées (les ressources gérées sont libérées automatiquement par le GC). Dispose n'est pas appelé uniquement après la fermeture de l'application. Il est appelé automatiquement automatiquement à partir de la méthode finalizer (appelée par GC) chaque fois qu'il n'y a aucune référence à cet objet. Il est également appelé à la fin du bloc en utilisant le bloc.

Quoi qu'il en soit, l'objet statique SqlConnection n'est pas une bonne idée. Mieux vaut toujours créer une nouvelle instance avec "using".

using (var conn = new SQLLiteConnection("connectionstring")) 
{ 
    conn.Open(); 
}//here is called Dispose() 
+0

Merci pour la précieuse réponse. Puis-je savoir la raison pour laquelle statique connexion DB n'est pas la meilleure idée et que, comme je le sais, GC efface uniquement les objets inutilisés. Mais j'initialise sqlconnection chaque fois qu'il est utilisé alors comment GC peut le considérer comme un objet inutilisé. Ya je sais qu'il est bon d'utiliser l'utilisation de mots-clés. Mais je ne peux pas changer toute l'application dès maintenant. –

+0

Quand c'est statique, les choses vont devenir très compliquées si vous y accédez par plus de threads. Les connexions sous-jacentes ont également des frais généraux. Et quand un autre objet non statique comme un lecteur de données fait référence à ce champ statique, GC peut ne pas collecter cette instance. Et là vient un nouveau niveau complet (difficulté de cauchemar) des problèmes que vous ne voulez pas traiter: D –