Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3283 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  [ASP.NET] Problème avec une connection à la base de données

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[ASP.NET] Problème avec une connection à la base de données

n°1288413
Arjuna
Aircraft Ident.: F-MBSD
Posté le 20-01-2006 à 16:17:44  profilanswer
 

J'ai un souci avec un site en C#.
 
Dans chaque page, j'instancie un objet "Queries", qui contient des méthodes qui lancent des requêtes dans la base de données et retournent des DataTable.
 
A la création de l'objet, ce dernier initialise une connection à la base de données, et l'ouvre (plus fait une série de tests pour vérifier que tout est OK).
 
Tout marche bien.
 
Dans le destructeur de mon objet, je fais un "cnx.Close();" puis "cnx.Dispose();" suivit d'un "cnx = null;"
 
Avec ça, à priori elle est bien morte...
 
Par contre, j'ai un problème.
 
Sur certaines pages, j'ai des Datareapeater, du et dans ces derniers, je dois refaire des requêtes.
 
Du coup, je déclare mon objet Queries en global dans la page.
 
Je l'instancie dans le Page_Load()
 
Mais je ne le détruit jamais, puisque les évènement "DataBinding" à priori sont assychrone, donc peuvent se lancer alors que Page_Load() a terminé (j'ai bon ?)
 
Seulement, après avoir constaté une chiée de problème (dont une majorité semble plutôt venir d'un problème réseau), je me suis apperçu que la mémoire dispo sur le serveur diminue à chaque chargement de page, et ne semble jamais redescendre.
De plus, au bout d'un moment, impossible de se connecter à la base.
 
Du coup j'ai l'impression que mon objet n'est jamais détruit. (me semblait pourtant que le GC était là pour ça...)
 
Là, dans le "Page_Load", j'ai rajouté à la fin "Queries = null;", histoire de la détruire correctement à la main. Seulement, j'ai pas encore testé, mais j'ai des doutes quand à la stabilité du truc contenu des évènements Databinding qui se lancent en // normalement.
 
Page_Dispose pourrait-il résoudre le problème ? Si vous pouviez m'aider un peu, là je suis dans une merde noire. J'aurais mieu fait de la faire en ASP, au moins c'est séquentiel et je maîtrise... Le truc doit impérativement fonctionner parfaitement le 30 janvier :/ Et lundi/mardi je suis en formation :sweat:
 
:cry:

mood
Publicité
Posté le 20-01-2006 à 16:17:44  profilanswer
 

n°1288425
Arjuna
Aircraft Ident.: F-MBSD
Posté le 20-01-2006 à 16:35:09  profilanswer
 

Comme prévu, le "null" en fin de Load provoque un "NullReferenceException" de temps en temps.
 
Plutôt que dans le "Disposed", j'ai foutu ça dans le "Unload".
 
Reste plus qu'à tester, sauf que là, l'autre raison, inconnue celle-là, fait que je ne peux à nouveau plus me connecter à la base, du coup le site m'envoie chier...
 
Pffffff, c'est pas gagné. Le marché de la chèvre est un marché qui se porte bien ?

n°1288429
moi23372
Posté le 20-01-2006 à 16:42:58  profilanswer
 

c'est quoi ton code de connexion vers la bd? quel bd utilises tu?

n°1288452
Arjuna
Aircraft Ident.: F-MBSD
Posté le 20-01-2006 à 17:05:10  profilanswer
 

J'utilise Oracle.
 
Voici des brides de code pour comprendre mon bordel.
 

Code :
  1. namespace bci
  2. {
  3. public class Connection
  4. {
  5.  private OracleConnection cnx;
  6.  public Connection()
  7.  {
  8.   this.cnx = new OracleConnection();
  9.  }
  10.  public bool Open(string cnxString)
  11.  {
  12.   this.cnx.ConnectionString = cnxString;
  13.   try
  14.   {
  15.    cnx.Open();
  16.   }
  17.   catch (Exception e)
  18.   {
  19.    this.ex = e;
  20.    Log.WriteEntry("Base indisponible.\n" + e.Message);
  21.   }
  22.   return this.isAvailable;
  23.  }
  24.  public void Close()
  25.  {
  26.   if (this.cnx.State != ConnectionState.Closed)
  27.   {
  28.    this.cnx.Close();
  29.   }
  30.  }
  31. }
  32. }
  33. namespace bci
  34. {
  35. public class Queries
  36. {
  37.  private Connection cnx;
  38.  public Queries(string cnxString)
  39.  {
  40.   cnx = new Connection();
  41.   cnx.Open(cnxString);
  42.  }
  43.  ~Queries()
  44.  {
  45.   cnx.Close();
  46.  }
  47. }
  48. }
  49. namespace bci
  50. {
  51. public class Collection : System.Web.UI.Page
  52. {
  53.  private void Page_Load(object sender, System.EventArgs e)
  54.  {
  55.     commander = new Queries(string.Format((string) Application["cnxString"], (string) Application["dbLogin"], (string) Application["dbPass"], (string) Application["dbTNS"]));
  56.  }
  57.  private void Page_Unload(object sender, System.EventArgs e)
  58.  {
  59.   commander = null;
  60.  }
  61.  protected void Collections_ItemDataBound(object sender, RepeaterItemEventArgs e)
  62.  {
  63.         subrepeater.DataSource = commander.LoadCollection2((Decimal) Session["codsoc"], (string) dr["ssfpro"], (string) dr["sigfou"], (string) Session["sfapro"], (string) Session["destination"], (string) Session["codlan"]);
  64.  }
  65.  private void InitializeComponent()
  66.  {   
  67.   this.Collections.ItemDataBound += new System.Web.UI.WebControls.RepeaterItemEventHandler(this.Collections_ItemDataBound);
  68.   this.Load += new System.EventHandler(this.Page_Load);
  69.   this.Unload += new System.EventHandler(this.Page_Unload);
  70.  }
  71. }
  72. }


 
En gros (évidement, y'a beaucoup plus de code que ça)


Message édité par Arjuna le 20-01-2006 à 17:05:36
n°1288465
Arjuna
Aircraft Ident.: F-MBSD
Posté le 20-01-2006 à 17:11:25  profilanswer
 

En postant ça, je viens de trouver et corriger une méga-merde dansun coin. M'enfin ça déconne toujours, donc y'a pas que ça


Message édité par Arjuna le 20-01-2006 à 17:11:37
n°1288589
moi23372
Posté le 20-01-2006 à 19:52:47  profilanswer
 

ici je vois que tu fais la connexion en mode connecté. Qu'est ce que ça donne en mode déconnecté? cad à l'utilisation de OracleDataAdapter (si je ne me trompe pas). et l'utilisation donc d'un dataset
 
moi perso, j'aime pas les OracleConnection, j'ai jamais réussi à faire fonctionner ce truc correctement.  
J'utilise toujours Oledb
 
OledbConnection conn = new OleDbConnection(chaine_connexion);
OledbDataAdapter adap = new OleDbDataAdapter (""; conn);
adap.selectCommand = new OleDbCommand(query, conn);
DataSet data = new DataSet();
adap.fill(data);
 
moi perso je préfère ce système. Je trouve ça plus performant et plus cours au niveau programmation car un dataset est facilement manipulable. Bien sure je sais pas si cette solution pourrait résoudre ton problème

n°1288624
Arjuna
Aircraft Ident.: F-MBSD
Posté le 20-01-2006 à 20:55:47  profilanswer
 

Je vais tester ça... Demain si j'ai le courage, sinon ce sera mercredi (je suis pas au boulot lundi et mardi)
 
Ceci dit, je crois que j'ai pas réussi à faire marcher ce mode avec OracleConnection

n°1288824
moi23372
Posté le 21-01-2006 à 11:33:50  profilanswer
 

sinon prend des OleDb ça marche très bien...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  [ASP.NET] Problème avec une connection à la base de données

 

Sujets relatifs
Problème Infopath et JScriptprobleme ordre des fichiers dans une galerie
Probleme ALTER TABLEproblème devc++ et ffmpeg
[ETL] Connaissez vous un outil ETL pour .NETProblème de sockets TCP
Probleme avec ma version JAVA ? j'arrive pas a faire tourner un prog ?[résolu] Sécurité base de données avec PHP
Changement hebergeur et base Mysql 
Plus de sujets relatifs à : [ASP.NET] Problème avec une connection à la base de données


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR