"Expiration du délais d'attente" mais pourquoi ?

"Expiration du délais d'attente" mais pourquoi ? - C#/.NET managed - Programmation

Marsh Posté le 25-07-2006 à 17:28:26    

Bonjour.
J'ai fais un petit programme qui fais une opération lourde sur un Server de base de données dans mon cas. SQLServer 2000. Je finis mon truc mais voila que maintenant il m'annonce au bout d'une disaine de seconde le message suivant  
"Expiration du délai d'attente. Le délai d'attente s'est écoulé avant la fin de l'opération ou le serveur ne répond pas." et apparement c'est .Net SqlClient Data Provider qui lui a sortie cela. Ce que je ne comprend pas c'est que cette requete s'execute depuis d'autre application telle que php ou via l'analyseur de code. Certe l'opération dure 2h environs.  
Voici ma chaine de connexion  "Data Source=xxx.xxx.xxx.xxx;Initial Catalog=Chicom_;User Id=sa;Password=;"
Aurais-je raté quelque chose ou y a t'il une chose à savoir?
 
Ma methode permettant d'ecrire dans une table
 

Code :
  1. public int ExecuteWrite(string pRequete){
  2.             SqlCommand oCommand = new SqlCommand(pRequete,this.oConnection);       
  3.             return oCommand.ExecuteNonQuery();           
  4.         }


Message édité par Berceker United le 25-07-2006 à 17:32:04
Reply

Marsh Posté le 25-07-2006 à 17:28:26   

Reply

Marsh Posté le 25-07-2006 à 17:32:33    

C'est au moment de la connection que ça déconne, ou au moment de l'execution ?
Si c'est l'execution qui plante, alors t'as bêtementun TimeOut.
 
dans ton objet sqlConnection, modifie la propriété de timeout.
idem dans ton objet sqlCommand.
et si t'as une transaction, toujours pareil.

Reply

Marsh Posté le 25-07-2006 à 17:38:58    

je l'ai repéré dans le SQLCommand que j'ai mis à zéro mais je ne savais pas qu'il pouvait y être dans le sqlConnection. Je te remercie :)

Reply

Marsh Posté le 25-07-2006 à 17:41:37    

ceci dit, 10 secondes, je trouve ça court quand même

Reply

Marsh Posté le 25-07-2006 à 17:53:33    

Maintenant il est placé à zéro et là j'ai les enregistrement.
Une autre question. Lorsqu'il y qu'un thread le programme est bloqué le temps de l'execution. Le progress bar aussi il est bloqué ?.

Reply

Marsh Posté le 25-07-2006 à 20:18:50    

Berceker United a écrit :

Maintenant il est placé à zéro et là j'ai les enregistrement.
Une autre question. Lorsqu'il y qu'un thread le programme est bloqué le temps de l'execution. Le progress bar aussi il est bloqué ?.


euh... rassure moi là : tu ne mets pas à jour le progressbar à partir d'un autre thread directement au moins ?


Message édité par Harkonnen le 25-07-2006 à 20:19:01

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 25-07-2006 à 21:03:24    

Ce que je voulais dire c'est que c'est pas un programme multi thread. Donc quand je lance le bouzin le programme reste figé mais je ne vois pas progressbar faire son travail pourtant je l'ai testé ailleurs et ça fonctionne.  
Je débute et je ne maitrise pas ça encore. C'est mon premier programme :/

Reply

Marsh Posté le 25-07-2006 à 21:17:06    

Il faut utiliser BeginInvoke() pour mettre à jour les controles. Les controles de Winforms ne sont pas thread safe, il est donc nécessaire de poster toute action que tu souhaites réaliser dessus dans une file d'attente.
BeginInvoke() prend en paramètre un delegate qui pointera vers la fonction dans laquelle tu mets à jour ta progressbar.  
 
http://www.codeproject.com/csharp/begininvoke.asp
 
edit: c'est marrant, le 1er paragraphe de cet article commence exactement comme ton dernier post [:ddr555]

Message cité 1 fois
Message édité par Harkonnen le 25-07-2006 à 21:17:38

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 25-07-2006 à 21:37:37    

Ha effectivement :D c'est qu'il y en qui pense à tous :D*
Bref en tous cas j'ai des choses à apprendre encore. But final Faire l'equivalent voir mieux de Flight simulator.
 

Spoiler :


Ben quoi  :o arrêté de penser en négatif. Laissez moi rêver   :whistle:  


Message édité par Berceker United le 25-07-2006 à 21:38:27
Reply

Marsh Posté le 26-07-2006 à 09:41:08    

Harkonnen a écrit :

BeginInvoke() prend en paramètre un delegate qui pointera vers la fonction dans laquelle tu mets à jour ta progressbar.  
 
http://www.codeproject.com/csharp/begininvoke.asp
 
edit: c'est marrant, le 1er paragraphe de cet article commence exactement comme ton dernier post [:ddr555]


Ca m'intéresse aussi ça tiens :)
 
Me suis arraché les cheveux toute la soirée hier là-dessus.
 
J'ai foutu des delegate partout, des threads dans tous les sens, recopié deux exemples de la doc C# et tout... pas moyen de mettre à jour ma progressbar.
Et vu que j'ai eu des pépins d'internet toute la soirée, j'ai fini par caller l'affaire :/
 
Vais regarder ça avec la plusgrande attention (en espérant que ça résolve enfin mon problème... là j'en suis à "je bloque sur le this.invoke()" <- le programme se met en pause et je sais pas pkoi :D)

Reply

Marsh Posté le 26-07-2006 à 09:41:08   

Reply

Marsh Posté le 26-07-2006 à 20:46:33    

petit up du topic, car le coup du invoke ne marche pas chez moi.
 
j'avais trouvé en première instance dans la msdn le même exemple que celui filé par harko. ça changeait RIEN.
 
j'ai ensuite modifié le truc selon un autre exemple de la msdn, sans effet... là ça restait carrément bloqué sur le Invoke()
 
le principe :
- lorsque je commence le "grabfiles", je vais lancer un traîtement long, qui consiste à vérifier dans un répertoire, fichier par fichier, que c'est bien une image.
- je lance donc ça dans un thread, qui doit entre autres, mettre à jour une progressbar disant où il en est.
- pendant ce temps, le thread principal doit attendre la fin du fils avant de continuer (et je pense que c'est ça qui coince)
 

Code :
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Drawing;
  4. using System.IO;
  5. using System.Windows.Forms;
  6. using System.Threading;
  7. namespace WindowsApplication1
  8. {
  9.     public partial class Main : Form
  10.     {
  11.         string path;
  12.         public List<string> files = new List<string>();
  13.         string[] filesModel;
  14.         Random rnd = new Random();
  15.         bool canGrab = true;
  16.         System.Windows.Forms.Timer slideShow = new System.Windows.Forms.Timer();
  17.         public DirectoryInfo dir;
  18.         ProgressBar progress;
  19.        
  20.         public Main()
  21.         {
  22.             InitializeComponent();
  23.             Graphics g = this.CreateGraphics();
  24.             g.Clear(Color.Black);
  25.             g.Dispose();
  26.             this.path = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures);
  27.             this.slideShow.Interval = 1500;
  28.             this.slideShow.Tick += new EventHandler(slideShow_Tick);
  29.             this.GrabFiles();
  30.         }
  31.         private void Main_Click(object sender, EventArgs e)
  32.         {
  33.             if (slideShow.Enabled)
  34.             {
  35.                 slideShow.Stop();
  36.             }
  37.             FolderBrowserDialog openFoler = new FolderBrowserDialog();
  38.             openFoler.SelectedPath = this.path;
  39.             openFoler.ShowNewFolderButton = false;
  40.             if (openFoler.ShowDialog(this) == DialogResult.OK)
  41.             {
  42.                 this.path = openFoler.SelectedPath;
  43.             }
  44.             openFoler = null;
  45.             this.GrabFiles();
  46.         }
  47.         private void GrabFiles()
  48.         {
  49.             if (canGrab)
  50.             {
  51.                 this.canGrab = false;
  52.                 this.files.Clear();
  53.                 this.progress = new ProgressBar();
  54.                 this.dir = new DirectoryInfo(this.path);
  55.                 if (this.dir.GetFiles().Length > 0)
  56.                 {
  57.                     this.progress.Maximum = dir.GetFiles().Length;
  58.                     this.progress.Value = 0;
  59.                     this.progress.Width = this.Width / 4;
  60.                     this.progress.Location = new Point((this.Width - progress.Width) / 2, (this.Height - progress.Height) / 2);
  61.                     this.progress.Visible = true;
  62.                     this.Controls.Add(this.progress);
  63.                     Thread t = new Thread(new ThreadStart(myThreadFunction));
  64.                     t.Start();
  65. /*
  66. * while (t.ThreadState != ThreadState.Stopped)
  67.                     {
  68.                         Thread.Sleep(25);
  69.                         this.progress.Value = this.files.Count;
  70.                         this.progress.Update();
  71.                         this.Refresh();
  72.                     }
  73. */
  74.                     t.Join();
  75.                     t = null;
  76.                     this.Controls.Remove(this.progress);
  77.                     this.progress = null;
  78.                 }
  79.                 this.dir = null;
  80.                 this.filesModel = new string[this.files.Count];
  81.                 this.files.CopyTo(this.filesModel);
  82.                 this.canGrab = true;
  83.                 if (this.files.Count == 0)
  84.                 {
  85.                     MessageBox.Show("Impossible de lancer le slideshow : il n'y a pas d'image !" );
  86.                 }
  87.                 else
  88.                 {
  89.                     this.slideShow.Start();
  90.                 }
  91.             }
  92.             else
  93.             {
  94.                 MessageBox.Show("Une autre action est en cours..." );
  95.             }
  96.         }
  97.         private void slideShow_Tick(object sender, EventArgs e)
  98.         {
  99.             bool can = false;
  100.             int cpt = 0;
  101.             Image pict = null;
  102.             while (!can)
  103.             {
  104.                 int idx = rnd.Next(this.files.Count);
  105.                 try
  106.                 {
  107.                     pict = Bitmap.FromFile(this.files[idx]);
  108.                     can = true;
  109.                     cpt--;
  110.                 }
  111.                 catch { }
  112.                 if (this.files.Count > 1)
  113.                 {
  114.                     this.files.RemoveAt(idx);
  115.                 }
  116.                 else
  117.                 {
  118.                     foreach (string s in this.filesModel)
  119.                     {
  120.                         files.Add(s);
  121.                     }
  122.                     cpt = files.Count;
  123.                 }
  124.             }
  125.             int sizeX = pict.Width;
  126.             int sizeY = pict.Height;
  127.             if (pict.Width > this.Width)
  128.             {
  129.                 sizeX = this.Width;
  130.                 sizeY = (int)((float)pict.Height * ((float)this.Width / (float)pict.Width));
  131.             }
  132.             if (pict.Height > this.Height)
  133.             {
  134.                 sizeX = (int)((float)pict.Width * ((float)this.Height / (float)pict.Height));
  135.                 sizeY = this.Height;
  136.             }
  137.             if (sizeX < this.Width / 2 && sizeY < this.Height / 2)
  138.             {
  139.                 sizeX *= 2;
  140.                 sizeY *= 2;
  141.             }
  142.             Size size = new Size(sizeX, sizeY);
  143.             Point pos = new Point((this.Width == size.Width) ? 0 : rnd.Next(this.Width - size.Width), (this.Height == size.Height) ? 0 : rnd.Next(this.Height - size.Height));
  144.             Rectangle dest = new Rectangle(pos, size);
  145.             Graphics g = this.CreateGraphics();
  146.             g.DrawImage(pict, dest);
  147.             g.Dispose();
  148.             pict = null;
  149.             GC.Collect();
  150.         }
  151.         private void myThreadFunction()
  152.         {
  153.             ThreadClass myThreadObject = new ThreadClass(this);
  154.             myThreadObject.getFiles();
  155.         }
  156.     }
  157.     public class ThreadClass
  158.     {
  159.         Main myFormControl;
  160.         public ThreadClass(Main myForm)
  161.         {
  162.             this.myFormControl = myForm;
  163.         }
  164.         public void getFiles()
  165.         {
  166.             Image img = null;
  167.             foreach (FileInfo fil in myFormControl.dir.GetFiles())
  168.             {
  169.                 try
  170.                 {
  171.                     img = Image.FromFile(fil.FullName);
  172.                     img.Dispose();
  173.                     myFormControl.files.Add(fil.FullName);
  174.                     GC.Collect();
  175.                 }
  176.                 catch { }
  177.             }
  178.             img = null;
  179.         }
  180.     }
  181. }


 
=> le code est "tel quel". il tourne, mais y'a carrément plus de gestion de la progressbar... j'ai shooté tout ce qui ressemblait aux appels à une delegate.

Reply

Marsh Posté le 26-07-2006 à 20:46:48    

ps: désolé, c'est un peu carrément le bordel...
 
en commentaires, c'est la dernière tentative que j'ai fait : le thread principal qui tente de mettre à jour la progressbar pendant que le fils tourne... toujours sans effest (mise à part tout ralentir)


Message édité par MagicBuzz le 26-07-2006 à 20:48:14
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed